Javascript 如何在ServiceWorker中为响应设置Cookie
在由页面导航触发的获取处理程序中,我尝试执行以下操作:Javascript 如何在ServiceWorker中为响应设置Cookie,javascript,performance,service-worker,Javascript,Performance,Service Worker,在由页面导航触发的获取处理程序中,我尝试执行以下操作: return event.respondWith(new Response('Hello!', { headers: { "Set-Cookie": "TestCookie=foo; path=/; Max-Age=60;" "TestHeader": "foo" } })); 然后我在浏览器中加载了任何URL,并得到了“Hello!”正文。在Chrome开发工具中,我看到网络面板中设置的TestHeader。但是
return event.respondWith(new Response('Hello!', {
headers: {
"Set-Cookie": "TestCookie=foo; path=/; Max-Age=60;"
"TestHeader": "foo"
}
}));
然后我在浏览器中加载了任何URL,并得到了“Hello!”正文。在Chrome开发工具中,我看到网络面板中设置的TestHeader
。但是cookie不会显示在网络面板中,也不会显示在应用程序>Cookies查看器中<代码>文档。cookie也无法生成它
请求由页面导航启动,因此没有机会在“从浏览器获取”选项卡上设置凭据:“include”
是否可以向ServiceWorker中的响应添加cookie?如果没有,是否可以以任何其他方式写入cookie?获取规范中有一些相关信息 根据: 禁止响应标头名称是一个标头名称,它是 以下内容之一的字节不区分大小写匹配:
设置Cookie
Set-Cookie2
集Cookie
头中添加此限制适用于使用初始头集构造新的响应
对象,或在事实之后向现有响应
对象添加头
有一项计划是在服务人员内部添加对读写Cookie的支持,但这将使用一种机制,而不是响应
对象中的设置Cookie
头。中有关于计划的更多信息。您可以尝试以下操作:
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;
}