Fetch | Ответы

Версия документа от 07 ноября 2021 года. Может измениться в будущем.

Результатом выборки является ответ (response). Ответ со временем развивается. То есть не все его поля доступны сразу.

Ответ имеет связанный тип (type): «basic«, «cors«, «default«, «error«, «opaque» или «opaqueredirect«. Если не указано иное, это «default«.

С ответом может быть связан флаг прерывания (aborted flag), который изначально не установлен.

Примечание

Это означает, что запрос был намеренно прерван разработчиком или конечным пользователем.

Ответ имеет связанный URL. Это указатель на последний URL-адрес ответа в списке URL-адресов ответа и null, если список URL-адресов ответа является пустым.

Ответ имеет связанный список URL-адресов (URL list)(список из нуля или более URL-адресов). Если не указано иное, это пустой список.

Примечание

За исключением последнего URL-адреса, если таковой имеется, список URL-адресов ответа не может быть доступен скрипту. Это нарушит обработку атомарного перенаправления HTTP.

Ответ имеет связанный статус (status), то есть состояние. Если не указано иное, это 200.

С ответом связано сообщение о состоянии (status message). Если не указано иное, это пустая последовательность байтов.

Примечание

Ответы по соединению HTTP/2 всегда будут иметь пустую последовательность байтов в качестве сообщения о состоянии, поскольку HTTP/2 их не поддерживает.

Ответ имеет связанный список заголовков (header list). Если не указано иное, он пуст.

У ответа есть связанное тело (body) (null или тело). Если не указано иное, оно null.

Примечание

Концепции источника и длины тела ответа сети всегда равны null.

Ответ имеет связанное состояние кеша (cache state) (пустая строка, «local» или «validated«). Если не указано иное, это пустая строка.

Примечание

Это предназначено исключительно для использования Service Workers (Работниками Службы) и Resource Timing (Ресурсы Сроки). [SW] [RESOURCE-TIMING]

ЭТО УДАЛЕНО!!! С ответом связан список CSP (CSP list), который представляет собой список объектов политики безопасности содержимого для ответа. Список пуст, если не указано иное. [CSP]

Ответ имеет связанный список имен заголовков, представленный CORS (CORS-exposed header-name list) (список из нуля или более имен заголовков). Список пуст, если не указано иное.

Примечание

Ответ обычно получает свой список имен заголовков, представленный CORS, путем извлечения значений заголовков из заголовка `Access-Control-Expose-Headers`. Этот список используется ответом, отфильтрованным CORS, для определения отображаемых заголовков.

Ответ имеет связанный флаг запрошенного диапазона (range-requested flag), который изначально не установлен.

Примечание

Это используется для предотвращения предоставления частичного ответа от более раннего запроса диапазона к API, который не выполнял запрос диапазона. Смотри раздел «Использование флага для подробного описания атаки».

В ответе есть связанные учетные данные, включающие запрос (request-includes-credentials — логическое значение), что изначально истинно (true).

С ответом связан флаг разрешения передачи по времени (timing allow passed flag), который изначально не установлен.

Примечание

Это используется для того, чтобы вызывающий объект выборки мог определить, разрешены ли конфиденциальные временные данные для извлекаемого ресурса, просмотрев флаг возвращенного ответа. Поскольку флаг ответа на переадресацию должен быть установлен, если он был установлен для предыдущих ответов в цепочке переадресации, это также отслеживается внутренне с помощью флага разрешения времени запроса с ошибкой.

С ответом связана информация о времени (timing info — null или информация о времени выборки), которая изначально равна null.

ЭТО УДАЛЕНО!!! Ответ может иметь связанный URL-адрес местоположения (null, ошибка или URL-адрес). Если не указано иное, в ответе отсутствует URL-адрес местоположения.

Примечание

Эта концепция используется для обработки перенаправления в Fetch и в алгоритме навигации HTML. Это гарантирует, что значение `Location` извлекается последовательно и только один раз. [HTML]

Ответ имеет связанную информацию о времени Работника Службы (service worker timing info — ноль или информация о времени работника службы), которая изначально равна нулю.

 

Ответ, тип которого — «error» и установлен флаг прерывания, известен как прерванная сетевая ошибка (aborted network error).

Ответ, тип которого — «error«, называется сетевой ошибкой (network error).

Сетевая ошибка — это ответ, статус которого всегда равен 0, статусное сообщение всегда представляет собой пустую последовательность байтов, список заголовков всегда пуст, а тело всегда равно null.

 

Отфильтрованный ответ (filtered response)- это ограниченное представление ответа, не являющегося сетевой ошибкой. Этот ответ называется внутренним ответом (internal response) связанным  отфильтрованным ответом.

Примечание

Алгоритм выборки возвращает такое представление, чтобы исключить случайную утечку информации из API. Если информация должна быть раскрыта по унаследованным причинам, например, для подачи данных изображения в декодер, может использоваться связанный внутренний ответ, который «доступен» только для внутренних алгоритмов спецификации и никогда не является отфильтрованным ответом.

Базовый отфильтрованный ответ (basic filtered response) — это отфильтрованный ответ, тип которого — «basic«, а список заголовков исключает любые заголовки из списка заголовков внутреннего ответа, имя которого является запрещенным именем заголовка ответа.

Отфильтрованный ответ CORS (CORS filtered response) — это отфильтрованный ответ, тип которого — «cors» и список заголовков исключает любые заголовки из списка заголовков внутреннего ответа, имя которых НЕ является CORS-безопасным именем заголовка ответа, указанным CORS-заданным списком имен заголовков внутреннего ответа.

Непрозрачный отфильтрованный ответ (opaque filtered response) — это отфильтрованный ответ, тип которого — «opaque«, список URL является пустым списком, статус — 0, статусное сообщение — это пустая последовательность байтов, список заголовков — пустой, а тело — null.

Отфильтрованный ответ с непрозрачным перенаправлением (opaque-redirect filtered response) — это отфильтрованный ответ, тип которого — «opaqueredirect«, статус является 0 (ноль), сообщение о состоянии — это пустая последовательность байтов, список заголовков пуст, а телоnull.

Примечание

Предоставление списка URL-адресов для фильтрованных ответов с непрозрачным перенаправлением безвредно, поскольку перенаправления не выполняются.

Другими словами, непрозрачный фильтрованный ответ и непрозрачный фильтрованный ответ с перенаправлением почти неотличимы от сетевой ошибки. При внедрении новых API не используйте внутренний ответ для алгоритмов внутренней спецификации, поскольку это приведет к утечке информации.

Это также означает, что API-интерфейсы JavaScript, такие как response.ok, будут возвращать довольно бесполезные результаты.

 

Чтобы клонировать (clone) ответ «response», выполните следующие действия:

1. Если response является отфильтрованным ответом, то возвращается новый идентичный отфильтрованный ответ, внутренний ответ которого является клоном внутреннего ответа response.
2. Пусть newResponse будет копией response, за исключением его тела.
3. Если тело response не null, тогда установите тело newResponse на результат клонирования тела response.
4. Верните newResponse.

 

Свежий ответ (fresh response) — это ответ, текущий возраст которого находится в пределах срока его свежести.

Ответ устаревший при повторной проверке (stale-while-revalidate response) — это ответ, который не является свежим ответом, и текущий возраст которого находится в пределах времени жизни устаревшего при повторной проверке.

Устаревший ответ (stale response) — это ответ, который не является свежим ответом или устаревшим при повторной проверке ответом.

 

URL-адрес местоположения (location URL) ответа response, заданный null или строка ASCII requestFragment, является значением, возвращаемым следующими шагами. Они возвращают null, ошибку или URL-адрес.

1. Если статус ответа response не является статусом переадресации, вернуть null.
2. Пусть location будет результатом извлечения значений списка заголовков из заданного "Location" и списка заголовков ответа response.
3. Если location является значением заголовка, установите location как результат синтаксического анализа местоположения location с URL-адресом ответа response.
Примечание

Если ответ response был создан с помощью конструктора Response, URL-адрес ответа response будет null, что означает, что местоположение location будет успешно проанализировано только в том случае, если это строка с абсолютным URL-адресом с фрагментом.

4. Если location является URL-адресом, фрагмент которого равен null, установите для фрагмента location значение requestFragment.
Примечание

Это гарантирует, что синтетические (действительно, все) ответы следуют модели обработки для перенаправлений, определенной HTTP. [HTTP-SEMANTICS]

5. Вернуть location.
Примечание

Алгоритм URL-адреса местоположения используется исключительно для обработки перенаправления в этом стандарте и в алгоритме навигации HTML, который обрабатывает перенаправления вручную. [HTML]

 

Информационные ссылки

Стандарт Fetchhttps://fetch.spec.whatwg.org/#responses

Перевод стандарта Fetch — https://efim360.ru/fetch/

Поделись записью