如何在 ServiceWorker 的响应中设置 cookie

And*_*rew 5 javascript performance service-worker

在页面导航触发的获取处理程序中,我尝试这样做:

return event.respondWith(new Response('Hello!', {
  headers: {
    "Set-Cookie": "TestCookie=foo; path=/; Max-Age=60;"
    "TestHeader": "foo"
  }
}));
Run Code Online (Sandbox Code Playgroud)

然后我在浏览器中加载任何 URL,并得到“你好!” 身体。在 Chrome devtools 中,我TestHeader在网络面板中看到了该集合。但是 cookie 没有显示在网络面板中,也没有显示在应用程序 > Cookie 查看器中。 document.cookie也无法生产。

该请求是由页面导航发起的,因此没有机会设置credentials: "include"从浏览器选项卡的提取。

是否可以在 ServiceWorker 的响应中添加 cookie?如果没有,是否可以以任何其他方式编写 cookie?

Jef*_*ick 3

Fetch 规范中有一些相关信息。

根据https://fetch.spec.whatwg.org/#forbidden-response-header-name

禁止的响应标头名称是与以下之一匹配的不区分字节大小写的标头名称:

  • Set-Cookie
  • Set-Cookie2

然后按照https://fetch.spec.whatwg.org/#concept-headers-append中的第 6 项:

否则,如果守卫是“响应”并且名称是禁止的响应标头名称,则返回。

这种对添加Set-Cookie标头的限制适用于使用Response一组初始标头构造新对象,或者事后将标头添加到现有标头中。Response对象。

有计划添加对在 Service Worker 内部读取和写入 Cookie 的支持,但这将使用Set-Cookie对象中标头以外的机制Response此 GitHub 问题中有有关该计划的更多信息。