在页面导航触发的提取处理程序中,我尝试这样做:
return event.respondWith(new Response('Hello!', {
headers: {
"Set-Cookie": "TestCookie=foo; path=/; Max-Age=60;"
"TestHeader": "foo"
}
}));
然后我在浏览器中加载了任何URL,并得到了“你好!”身体。在Chrome devtools中,我看到网络面板中设置了TestHeader
。但是cookie没有显示在网络面板中,也没有出现在应用程序>中。 Cookies查看器。 document.cookie
也无法生成它。
请求由页面导航启动,因此无法在浏览器选项卡上设置credentials: "include"
。
是否可以在ServiceWorker中为响应添加cookie?如果没有,是否可以以任何其他方式编写cookie?
答案 0 :(得分:2)
Fetch规范中有一些相关信息。
根据https://fetch.spec.whatwg.org/#forbidden-response-header-name:
禁止响应标头名称是a的标头名称 其中一个的字节大小写不匹配:
Set-Cookie
Set-Cookie2
然后根据https://fetch.spec.whatwg.org/#concept-headers-append中的第6项:
否则,如果guard是“response”且name是禁止的响应头名称,则返回。
添加Set-Cookie
标头的限制适用于使用初始标头集构建新的Response
对象,或者在事实之后向现有Response
对象添加标头。
计划添加对服务工作者内部读取和写入cookie的支持,但这将使用Set-Cookie
对象中Response
标头以外的机制。有关this GitHub issue中的计划的更多信息。
答案 1 :(得分:0)
您可以尝试以下操作:
async function handleRequest(request) {
let response = await fetch(request.url, request);
// Copy the response so that we can modify headers.
response = new Response(response.body, response)
response.headers.set("Set-Cookie", "test=1234");
return response;
}