我对服务工作者的策略是,如果url匹配某种特定格式,那么只有服务工作者才能拦截它,否则浏览器应该正常处理它,
对于我使用evt.respondWith()的所有情况,拦截它并提供自定义响应,但如果url与任何格式不匹配,我该怎么办
我有几个选项,所有这些都有效,但我不确定哪一个在逻辑上是正确的
1)什么都不做,意味着我有条件检查fetch方法中每个定义的格式,但如果它们不匹配我什么都不做,我没有任何"否则" condition。在这种情况下,浏览器正常获取页面,但我不确定它是否正确,实际发生了什么,cookie是否通过?
2)在else方法中我有fetch(event.request, { credentials: 'include' });
这也有效,我不确定我是否需要在这里包含凭证条款,根据我的理解而不是服务工作者,但浏览器在此处理请求,因此它将自动包含cookie。如果我在这里错了,请纠正我。
3)event.respondWith(fetch(event.request, { credentials: 'include' }));
这也有效,我想因为我正在使用event.respondWith,这里我需要明确地包括凭证(我不确定)。但我怀疑是否需要在这里使用event.respondWith
。我对event.respondWith
的了解是,我们只在我们想为fetch事件提供自定义响应时使用它。由于我们希望这些请求按原样处理,我们是否需要使用{{1}在这里?
我所有的困惑都来自于我对event.respondWith
缺乏了解,有人可以解释一下,我应该何时使用
它?
答案 0 :(得分:1)
event.respondWith可让您使用您创建的回复(使用fetch或Cache API)回复网络请求,甚至可以使用{{3}手动创建})。
如果您未在fetch
事件处理程序中调用它,浏览器将处理该请求。
如果你用fetch(event.request)
来调用它,它基本上与让浏览器处理它一样(因为fetch
将执行完全相同的请求,如果你没有调用浏览器将执行event.respondWith
)。
请注意event.respondWith
将使用您传递给它的值或您传递给它的承诺的值进行响应。
event.respondWith(new Response('Some body.'));
event.respondWith(new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(new Response('Some body.'));
}, 1000);
}));