Shl*_*rtz 5 javascript header request service-worker
我创建了一个非常基本的 service worker,它在fetch
事件上记录请求标头:
self.addEventListener('fetch', event => {
console.log("- Fetch -");
for (const pair of event.request.headers.entries()) {
console.log(pair[0]+ ': '+ pair[1]);
}
});
Run Code Online (Sandbox Code Playgroud)
在主页上,我正在获取相同的页面,如下所示:
function fetchPage() {
fetch(location.href);
}
Run Code Online (Sandbox Code Playgroud)
记录标题时,我只得到以下 2 个标题:
- Fetch -
service-worker.js:12 accept: */*
service-worker.js:12 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Run Code Online (Sandbox Code Playgroud)
为什么我看不到任何其他/自定义标题?
这是安全限制吗?
是的,这些标头是故意隐藏的。标头列表和请求对象的一般行为在Fetch 标准中指定。
该规范中的非规范部分“HTTP header 层划分”解释了请求分三个阶段进行,所有这些阶段都可能修改 header 列表,而依赖 Fetch 和 Service Worker 规范的客户端代码只能访问前两个阶段。因此,您的服务工作线程在添加其他标头之前就收到了标头列表。
Fetch 规范还包括禁止的标头名称列表,客户端代码在任何情况下都无法设置这些标头名称;这些标头完全由用户代理控制。还有其他机制限制客户端代码访问标头列表,例如与 CORS 相关的机制。
这一切的原因确实是安全性:这保证了某些标头无法被尝试执行请求伪造的恶意脚本代码读取或篡改(制作服务器可能依赖的来自可信来源的恶意标头)、浏览器指纹识别(通过 HTTP 标头识别用户)或秘密提取(例如,从请求标头中提取 cookie)。
归档时间: |
|
查看次数: |
794 次 |
最近记录: |