在HTTP状态代码旁边的Google Chrome控制台中,Request
我们有info (from ServiceWorker)
。
可以Request
知道它Response
来自ServiceWorker吗?date
从比较Response Headers
呢?
按照设计,通过a返回FetchEvent#respondWith()
的响应与没有服务人员参与的响应是无法区分的。无论我们谈论的响应是通过获得的适用XMLHttpRequest
,window.fetch()
或者设置src=
一些元素属性。
如果您要区分哪些响应是通过服务人员参与而产生的,这一点很重要,那么我能想到的最简洁的方法是将HTTP标头显式添加到Response
馈入的对象中FetchEvent#respondWith()
。然后,您可以从受控页面检查该标题。
但是,取决于您的服务工作者如何获取它Response
,这可能会有些棘手/很棘手,除非您有强大的用例,否则我不能说我建议这样做。这是一种(再次,不建议使用)方法:
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
了的Response
被退回fetch()
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句