我们如何检查请求的响应是否来自 Service Worker

2024-01-07

在 Google Chrome 控制台中 HTTP 状态代码旁边Request我们有信息(from ServiceWorker).

Can Request以某种方式意识到Response来自 ServiceWorker?比较date from Response Headers maybe?


根据设计,响应通过FetchEvent#respondWith()与没有服务人员参与的响应没有区别。无论我们正在讨论的响应是否是通过以下方式获得的,这都适用XMLHttpRequest, window.fetch(),或设置src=某些元素上的属性。

如果区分哪些响应是通过服务工作者参与发起的对您来说很重要,那么我能想到的最干净的方法是显式地将 HTTP 标头添加到Response被送入的对象FetchEvent#respondWith()。然后,您可以从受控页面检查该标头。

但是,取决于您的 Service Worker 如何获取其Response,这可能有点棘手/hacky,我不能说我推荐它,除非你有一个强大的用例。以下是(再次强调,不推荐)方法可能的样子:

event.respondWith(
  return fetch(event.request).then(function(response) {
    if (response.type === 'opaque') {
      return response;
    }

    var headersCopy = new Headers(response.headers);
    headersCopy.set('X-Service-Worker', 'true');

    return response.arrayBuffer().then(function(buffer) {
      return new Response(buffer, {
        status: response.status,
        statusText: response.statusText,
        headers: headersCopy
      });
    });
  })
)

如果你返回一个不透明的Response,除了直接将其返回到页面之外,您不能对其执行太多操作。否则,它会将一堆东西复制到一个新的中Response有一个X-Service-Worker标头设置为true。 (这是一种迂回的方法来解决您不能直接修改headers of the Response由返回fetch().)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们如何检查请求的响应是否来自 Service Worker 的相关文章

随机推荐