Service-Worker-Allowed header

HTTP Service-Worker-Allowed 响应头用于放宽服务工作线程默认 scope 的路径限制。

默认情况下,服务工作线程注册的 scope 是服务工作线程脚本所在的目录。例如,如果脚本 sw.js 位于 /js/sw.js 中,则默认情况下它只能控制 /js/ 下的 URL。服务器可以使用 Service-Worker-Allowed 头来允许服务工作线程控制其自身目录之外的 URL。

服务工作线程会拦截其作用域内的所有网络请求,因此除非必要,否则应避免使用过于宽泛的作用域。

头类型 响应头
禁止请求头

语法

http
Service-Worker-Allowed: <scope>

指令

<scope>

一个字符串,表示定义服务工作线程注册作用域的 URL;即服务工作线程可以控制的 URL 范围。

示例

使用 Service-Worker-Allowed 扩大服务工作线程的作用域

下面的 JavaScript 示例包含在 example.com/product/index.html 中,并尝试 注册 一个服务工作线程,其作用域适用于 example.com/ 下的所有资源。

js
navigator.serviceWorker.register("./sw.js", { scope: "/" }).then(
  (registration) => {
    console.log("Install succeeded, scoped to '/'", registration);
  },
  (error) => {
    console.error(`Service worker registration failed: ${error}`);
  },
);

对服务工作线程脚本资源请求(./sw.js)的 HTTP 响应包括设置为 /Service-Worker-Allowed 头。

http
HTTP/1.1 200 OK
Date: Mon, 16 Dec 2024 14:37:20 GMT
Service-Worker-Allowed: /

// sw.js contents…

如果服务器未设置此头,则服务工作线程注册将失败,因为 scope 选项({ scope: "/" })请求的作用域比服务工作线程脚本所在的目录(/product/sw.js)更宽泛。

规范

规范
Service Workers
# service-worker-allowed

浏览器兼容性

另见