2015-11-08 602 views
19

我很熟悉http状态码,但最近我在我的chrome调试器中看到了一条奇怪的线。而不是普通的Status Code:200 OK我看到以下内容:Status Code:200 OK (from ServiceWorker)”状态代码:200 OK(来自ServiceWorker)?

enter image description here

我的猜测是,这只是告诉我,ServiceWorker来访问此文件在某种程度上负责,但是这仅仅是随机的猜测。任何人都可以权威地(没有猜测,并链接到受尊重的资源)告诉我这是什么意思,什么影响?

回答

34

这是一个常见的混淆来源,所以我想进一步详细一点。

我有一个完整的工作演示this Gist,您可以查看live version of it感谢RawGit。

这里的服务人员联代码的相关部分,用于说明目的:

self.addEventListener('fetch', event => { 
    if (event.request.url.endsWith('one.js')) { 
    // Requests for one.js will result in the SW firing off a fetch() request, 
    // which will be reflected in the DevTools Network panel. 
    event.respondWith(fetch(event.request)); 
    } else if (event.request.url.endsWith('two.js')) { 
    // Requests for two.js will result in the SW constructing a new Response object, 
    // so there won't be an additional network request in the DevTools Network panel. 
    event.respondWith(new Response('// no-op')); 
    } 

    // Requests for anything else won't trigger event.respondWith(), so there won't be 
    // any SW interaction reflected in the DevTools Network panel. 
}); 

这里就是网络面板的过滤版本看起来像在Chrome 48时服务人员是在控制页面,并请求为one.jstwo.js制成,并且three.js

Chrome DevTools Network panel

我们的服务人员的fetch手柄R将做三件事情之一:

  • 如果它是one.js的请求时,它会激发关闭了同样的URL fetch()请求,然后使用该响应呼叫event.respondWith()。第一one.js条目的截图中,一个以“(来自ServiceWorker)”中的“大小”一栏,有凭借的事实,即我们俗称的event.respondWith()处理fetch里面。第二one.js条目屏幕截图,所述一个与小齿轮图标旁边和“(从高速缓存)”中的“尺寸”列,表示fetch()请求被服务人员内部取得同时响应该事件。由于实际的one.js文件在我使用此屏幕截图时已经在HTTP缓存中,因此您会看到“(from cache)”,但如果HTTP缓存中没有该响应,您会看到一个实际的网络请求响应大小。
  • 如果它是two.js的请求时,它会处理的“凭空”建设一个新的Response对象的请求。 (是的,你可以这样做!)在这种情况下,我们呼叫event.respondWith(),因此在“大小”列中有一个条目two.js和“(来自ServiceWorker)”。但与one.js不同,我们没有使用fetch()来填充响应,因此two.js网络面板中没有其他条目。
  • 最后,如果它是three.js的要求,我们的服务人员的fetch事件处理程序实际上不会调用event.respondWith()。从页面的角度来看,也从Network面板的角度看,服务工作者没有参与该请求,这就是为什么在“Size”中只有“(来自缓存)”而不是“(来自ServiceWorker)” “专栏。
+2

带有齿轮图标的所有条目在启动器列中的值均为“其他”。也许更具描述性的价值会更有意义? –

+1

https://code.google.com/p/chromium/issues/detail?id=555070 –

2

服务工作者是通过在后台浏览器中运行的脚本。因此状态代码:200 OK(来自ServiceWorker)表示GET或HEAD请求的“OK”成功代码,此状态来自ServiceWorker。

你可以阅读这个链接,了解更多关于此。 http://www.html5rocks.com/en/tutorials/service-worker/introduction/

+0

它会产生什么影响? –

1

这是正常现象。为了避免每个请求200引起的混淆。它显示请求是SUCCESSservice-worker已回应资源/请求而不是network/server