新的 VPN 位置不会重置通知权限
通知权限属于站点源,而不属于你的 IP。看看哪一层保存着哪一项授权,以及为什么通过 VPN 时推送投递看起来像是坏了。
认为更换 VPN 能重置站点通知权限的想法是错的,而且这种错误会实实在在地浪费人的时间。你的出口地址没有任何部分属于权限记录。站点的授权是针对其源、保存在同一个浏览器配置文件里的,所以从一个服务器换到另一个,它仍然留在原处。真正改变的是你的会话,而这通常正是人们判定 VPN 动了他们的通知时,实际上在看的东西。
三处看起来像同一个设置的地方
权限是一条记录,操作系统的通知开关是另一条,站点自己的订阅状态是第三条。每一处都在不同的位置、被不同的操作撤销。
| Layer | Where it lives | What actually revokes it |
|---|---|---|
| Permission grant | Browser profile, keyed by origin | Site settings, site reset, or clearing site data |
| OS delivery switch | Operating system notification settings | The OS per-app or per-browser toggle |
| Push subscription | Push service, bound to a service worker registration | Unsubscribe, or a subscription the service considers expired |
权限挂在哪里
网页通知权限是按源、按配置文件授予的。它跟随的是https://app.example.com而不是你的公网地址,所以同一个站点在另一台机器上被询问时仍要再问一次,所以换一个 VPN 节点并不会产生新的提示。要在它被记录的地方核查:站点设置里的通知面板会列出已授予的源,页面本身也能报告自己的状态。
chrome://settings/content/notifications
navigator.permissions.query({name: 'notifications'})
chrome://serviceworker-internals
该查询报告源已经拥有的状态,而不会请求新的状态;service worker 页面则是一条注册及其 push 订阅存在或无法存在的地方。如果权限在、投递却仍然失败,你看到的是第三层,而不是第一层。
push 通道是另一段关系
Web Push 增加了一条页面并不直接控制的订阅。浏览器向PushSubscriptionpush 服务申请,把端点 URL 交给页面,之后投递发往该端点并交给已注册的 service worker。MDN 关于PushSubscription的文档把端点描述为推送服务器上、属于订阅 worker 的自定义 URL,这正是关键:它是一种投递能力,而不是你对外发布的公网地址。
由此有两个后果。第一,端点 URL 应被视为敏感信息,因此不该出现在公开的支持帖里。第二,推送服务会强制执行自己的身份验证,所以仅仅持有 URL 并不能证明谁都能发出一条经过验证的消息。当你取消订阅时,浏览器会告知推送服务使该订阅失效,那才是结束投递的操作。切换 VPN 服务器不是那个操作。
为什么 VPN 看起来像元凶
改变出口地址后,许多站点会重新认证你、轮换会话 cookie,或者把设置页从头重绘一遍。于是来自该站点的通知可能因为与权限毫无关系的原因而停止:新会话不是订阅时的那个、站点重新核对自己的营销同意,或者某条地区规则把该功能隐藏了。投递也可能失败,因为新路径到 push 端点主机的连接不通或很慢,而从外部看,这与权限被撤销一模一样。
在下任何结论之前,请分层阅读。权限面板说明授权是否存在;service worker 列表说明注册与订阅是否存在;操作系统开关说明浏览器到底能不能显示任何东西。
改你真正想改的东西
如果你想让通知停下来,就撤销该源的授权并取消站点 push 设置的订阅,然后确认操作系统开关不是站点与锁屏之间的唯一一环。拦截未来的通知并不会删除站点已经拥有的账号数据,那是对站点的另一个请求。
如果你想要不同的网络路径,就换 VPN。它影响会话身份、地区规则以及你能访问哪些服务器,并且不碰通知权限。
无论是否经过 VPN,都要用同样的怀疑看待通知内容。熟悉的浏览器渲染出一条消息,并不能证明发送方或链接是合法的。