Код состояния: 200 OK (от ServiceWorker) в Chrome Network DevTools?

Я знаком с кодами состояния http, но недавно я увидел странную строку в своем отладчике Chrome. Вместо обычного Status Code:200 OK я увидел следующее: Status Code:200 OK (from ServiceWorker).

введите описание изображения здесь

Я предполагаю, что это просто говорит мне, что ServiceWorker каким-то образом отвечает за доступ к этому документу, но это просто случайное предположение. Кто-нибудь может авторитетно (без догадок, со ссылками на уважаемые ресурсы) сказать, что это значит и каковы последствия?


person Salvador Dali    schedule 08.11.2015    source источник


Ответы (3)


Это распространенный источник путаницы, поэтому я хотел бы остановиться на нем немного подробнее.

У меня есть полная рабочая демонстрация в этом Gist, и вы можете просмотреть файл живая версия благодаря 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.js, two.js и three.js:

Сетевая панель Chrome DevTools

Обработчик fetch нашего сервис-воркера сделает одну из трех вещей:

  • Если это запрос для one.js, он выполнит запрос fetch() для того же URL-адреса, а затем вызовет event.respondWith(), используя этот ответ. Первая запись one.js на снимке экрана с пометкой «(from ServiceWorker)» в столбце «Размер» присутствует благодаря тому факту, что мы вызвали event.respondWith() внутри обработчика fetch. Вторая запись one.js на снимке экрана, та, что с маленьким значком шестеренки рядом с ней и «(из кеша)» в столбце «Размер», представляет этот запрос fetch(), который был сделан внутри сервисного работника при реагировании на событие. Поскольку фактический файл one.js уже был в кеше HTTP в тот момент, когда я сделал этот снимок экрана, вы видите «(из кеша)», но если бы в кеше HTTP еще не было этого ответа, вы бы увидели фактический сетевой запрос вместе с размер ответа.
  • Если это запрос на two.js, он обработает запрос, создав новый объект Response "из воздуха". (Да, вы можете это сделать!) В данном случае мы вызываем event.respondWith(), поэтому для two.js есть запись с «(от ServiceWorker)» в столбце «Размер». Но в отличие от one.js, мы не используем fetch() для заполнения ответа, поэтому на панели «Сеть» нет дополнительной записи для two.js.
  • Наконец, если это запрос на three.js, обработчик события fetch нашего сервис-воркера на самом деле не будет вызывать event.respondWith(). С точки зрения страницы, а также с точки зрения панели «Сеть» сервисный работник не участвует в этом запросе, поэтому в поле «Размер» есть только «(из кеша)», а не «(из ServiceWorker)». " столбец.
person Jeff Posnick    schedule 11.11.2015
comment
Все записи со значком шестеренки имеют значение «Другое» в столбце «Инициатор». Может быть, более описательное значение имело бы больше смысла? - person Šime Vidas; 12.11.2015
comment
@JeffPosnick проблема возникает, когда вы хотите проверить кеш. developers.google.com/web/ilt/ pwa/ С помощью этого предлагаемого метода каждый запрос указан как от сервисного работника на вкладке Chrome, даже те, которые делегированы в сеть. Как обеспечить правильное отображение истинных сетевых запросов в этом сценарии? - person Noel Abrahams; 19.08.2018
comment
Что означает значок шестеренки? - person joeshmoe301; 28.12.2018
comment
Я нашел ответ на свой вопрос о том, что означает значок шестеренки, на странице работников службы отладки Google (developers.google.com/web/fundamentals/codelabs/), который также ссылается на этот вопрос о переполнении стека. Значок шестеренки означает, что эти запросы поступили от самого Service Worker. В частности, это запросы, сделанные обработчиком установки Service Worker для заполнения автономного кеша. - person joeshmoe301; 31.12.2018
comment
@Jeff Posnick Здравствуйте, не могли бы вы проверить этот вопрос: stackoverflow. ком/вопросы/64117929/ - person Nevin Madhukar K; 29.09.2020

Service Worker — это скрипт, который запускается вашим браузером в фоновом режиме. Таким образом, код состояния: 200 OK (от ServiceWorker) означает, что код успеха «ОК» для запроса GET или HEAD, и этот статус исходит от ServiceWorker.

Вы можете прочитать эту ссылку, чтобы узнать больше об этом. http://www.html5rocks.com/en/tutorials/service-worker/introduction/

person Hoang Tran Son    schedule 08.11.2015
comment
Какие последствия это будет иметь? - person Salvador Dali; 08.11.2015

Это нормально . Чтобы избежать путаницы, возникающей 200 для каждого запроса. Он показывает, что запрос является SUCCESS, но service-worker ответил на ресурс/запрос вместо network/server

person Atul Sharma    schedule 27.12.2016