如何处理不受服务工作者

时间:2016-02-24 08:57:13

标签: service-worker fetch-api

我对服务工作者的策略是,如果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缺乏了解,有人可以解释一下,我应该何时使用 它?

1 个答案:

答案 0 :(得分:1)

event.respondWith可让您使用您创建的回复(使用fetchCache 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);
}));