javascript - 为什么在我的 service worker range header 没有被发送?

标签 javascript google-chrome service-worker

嗨,我有简单的服务人员,但我的 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 enter image description here enter image description here

最佳答案

注意,我不知道什么是范围 header ,请耐心等待。 我知道出于安全原因,服务人员无法使用某些 header 。基本上你不能篡改请求和响应。例如,您无权访问来自 3rd 方域的响应对象中的 Cache-Control,这样您就无法调整 HTTP 缓存逻辑。这可能是你的问题,但我不能肯定地说。 查找有关不透明请求和响应的规则。

关于javascript - 为什么在我的 service worker range header 没有被发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44627573/

相关文章:

javascript - 如何在不等待页面重新加载的情况下为BrowserView切换网站?

javascript - 平面中的文本不会在 A-Frame PWA 中离线显示

javascript - jQuery 加载问题。不知道如何处理这个 AJAX 调用

javascript - 如何通过在元素外部单击将元素设置为只读

javascript - 如何在 VueJS 中格式化(可能为空/空)日期

css - Chrome : Having an HTML5 video position: fixed or absolute causes all background-attachment: fixed to break

javascript - jQuery Mobile 无法在 Google Chrome 上运行

javascript - sw 预缓存 - 从不同域加载 Assets 的运行时缓存

service-worker - 忽略 Service Worker 中的 ajax 请求

javascript - jquery 事件后转到 href