为什么我的服务工作范围标题没有被发送?

时间:2017-06-19 10:04:06

标签: 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
  });
}

在这里,您可以看到服务工作者捕获的请求,第二个发送到api,您可以注意到Range标头丢失。为什么?我的浏览器:Chrome/59.0.3071.104 enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

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