讲师中心 微信公众号
AI工具推荐 视频效率加速

JavaScript推送通知_Web Push协议详解

陌辰大大_6589

陌辰大大_6589

发布时间:2025-11-18 16:41:08

|

676人浏览过

|

来源于php中文网

原创

Web Push技术通过浏览器的推送服务实现用户离开页面后仍能接收通知。1. 流程包括用户授权、生成PushSubscription、服务端存储订阅信息、服务器加密推送消息至浏览器端点、Service Worker触发通知显示。2. PushSubscription包含endpoint(指向浏览器推送服务器)、p256dh公钥和auth密钥,用于安全通信。3. 消息必须经ECDH加密并使用VAPID协议验证服务器身份,防止匿名推送。4. Service Worker监听push事件解密并展示通知,支持后台运行与用户交互响应。整个机制依赖前端、后端与浏览器协同,核心在于安全加密与标准化协议,现代框架已简化集成但理解底层有助于问题排查。

javascript推送通知_web push协议详解

网站想要在用户离开页面后依然能传递重要信息,Web Push 技术就是关键。JavaScript 推送通知依赖于一套标准化的协议体系,核心是 Web Push 协议(RFC 8030)。它允许服务器主动向用户的浏览器发送消息,即使网页未打开也能触发通知。实现这一功能不只靠前端 JavaScript,而是从前端注册、服务端推送到浏览器中转的完整链路。

1. 推送通知的基本流程

整个 Web Push 的执行流程包含几个关键步骤:

  • 用户授权: 页面通过 JavaScript 请求用户许可,只有同意后才能接收通知。
  • 订阅生成: 浏览器为当前用户设备生成唯一的推送订阅信息(PushSubscription),包含端点 URL 和加密密钥。
  • 服务端存储: 网站后端保存该订阅数据,用于后续推送。
  • 服务器推送: 当需要发送通知时,后端向订阅中的端点 URL 发起 HTTPS 请求。
  • 浏览器显示: 浏览器接收到消息后,由 Service Worker 触发 Notification API 展示提示。

这个过程涉及前端、后端和浏览器厂商(如 Chrome、Firefox)三方协作,其中推送消息实际由各大浏览器运营的推送服务中转,比如 Google 的 FCM 或 Mozilla 的 Autopush。

2. PushSubscription 订阅对象详解

调用 registration.pushManager.subscribe() 后返回的订阅对象包含关键信息:

立即学习“Java免费学习笔记(深入)”;

  • endpoint: 唯一的推送地址,指向浏览器厂商的推送服务器,所有消息必须发送到此 URL。
  • keys.p256dh: 用于内容加密的公钥,确保传输安全。
  • keys.auth: 认证密钥,配合 p256dh 实现消息解密。

这些信息是推送的基础,服务器必须使用它们对消息体进行加密后再发送,否则浏览器会拒绝显示。

前端设计引擎
前端设计引擎

使用此技能可创建独具特色、具备生产级质量的前端界面,设计品质高。当用户要求构建网页组件、页面、产物、海报或应用程序时(例如:网站、落地页、仪表盘、React 组件、HTML/CSS 布局,或对任意 Web UI 进行样式优化与视觉美化),请启用该能力。输出需为富有创意、精雕细琢的代码与 UI 设计,避免千篇一律的 AI 风格。

下载

3. Web Push 消息加密与 VAPID 协议

为了保证安全,Web Push 要求所有推送消息必须加密。主要依赖两种机制:

  • ECDH 加密: 使用订阅中的 p256dh 和 auth 密钥,结合服务器生成的临时密钥,对消息内容进行 AES-GCM 加密。
  • VAPID(Voluntary Application Server Identification): 让推送服务器识别应用身份,避免匿名推送。VAPID 包含一对公私钥,服务器用私钥签名 HTTP 头部的 Authorization 和 Crypto-Key 字段。

VAPID 公钥需在前端注册时提供,通常以 base64 编码传入 subscribe() 方法的 applicationServerKey 参数。浏览器据此验证推送来源合法性。

4. Service Worker 与通知显示

即使页面关闭,Service Worker 仍可在后台运行,负责接收并展示通知。需要监听 push 事件:

self.addEventListener('push', event => {
  const data = event.data.json();
  const options = {
    body: data.body,
    icon: '/icon.png'
  };
  event.waitUntil(self.registration.showNotification(data.title, options));
});

event.waitUntil() 确保通知显示完成前 Worker 不会被终止。还可以监听 notificationclick 事件处理用户点击行为。

基本上就这些。Web Push 的难点在于加密流程和 VAPID 配置,但一旦打通,就能实现跨平台的消息触达。现代框架如 Firebase Cloud Messaging 或第三方服务(OneSignal、Pushy)已封装底层细节,简化了集成过程。不过理解协议本身,有助于排查订阅失败、消息未送达等问题。

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2846

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5699

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

4047

2026.03.24

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3743

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

934

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

6646

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5490

2024.08.16

Go 语言 HTTP 编程与中间件开发教程合集
Go 语言 HTTP 编程与中间件开发教程合集

全面讲解 Go 语言 HTTP 编程的核心知识,涵盖 net/http 标准库的 Server/Handler/HandlerFunc 体系、DefaultServeMux 路由注册与自定义路由器、Request / ResponseWriter 请求响应处理、中间件(Middleware)链式设计模式与常见中间件(日志/CORS/认证/限流)开发、http.Client 的超时配置与连接池管理、Cookie / Session 处理、

561

2026.05.08

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn