嗨,我有简单的服务人员,但我的 Range header即使我认为我可以在请求对象上记录它也没有被发送。
self.addEventListener('fetch', async function(event) {
if (event.request.headers.get("range")) {
const response = await fetch(event.request.clone());
return event.respondWith(this.getPartialResponse(event.request, response));
}
return event.respondWith(fetch(event.request));
}
async getPartialResponse(req, res) {
const pos = Number(/^bytes\=(\d+)\-$/g.exec(req.headers.get("range"))[1]);
const ab = await res.arrayBuffer();
const headers = new Headers(res.headers);
headers.append("Content-Range", `bytes ${pos}-${ab.byteLength - 1}/${ab.byteLength}`);
headers.append("Content-Length", ab.byteLength - pos + 1);
return new Response(ab.slice(pos), {
status: 206,
statusText: "Partial Content",
headers
});
}
在这里您可以看到第一个请求被 service worker 捕获,第二个请求发送到 api,您可以注意到 Range
header 丢失。为什么 ?我的浏览器:Chrome/59.0.3071.104
最佳答案
注意,我不知道什么是范围 header ,请耐心等待。 我知道出于安全原因,服务人员无法使用某些 header 。基本上你不能篡改请求和响应。例如,您无权访问来自 3rd 方域的响应对象中的 Cache-Control,这样您就无法调整 HTTP 缓存逻辑。这可能是你的问题,但我不能肯定地说。 查找有关不透明请求和响应的规则。
关于javascript - 为什么在我的 service worker range header 没有被发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44627573/