--- title: WindowOrWorkerGlobalScope.fetch() slug: Web/API/WindowOrWorkerGlobalScope/fetch tags: - Справка - запрос - метод translation_of: Web/API/WindowOrWorkerGlobalScope/fetch ---
Метод fetch()
, относящийся к миксину {{domxref("WindowOrWorkerGlobalScope")}}, запускает процесс извлечения ресурса из сети. Возвращает promise, содержащий {{domxref("Response")}} объект (ответ на запрос).
WorkerOrGlobalScope
относится к {{domxref("Window")}} и {{domxref("WorkerGlobalScope")}} сразу. Это означает, что метод fetch()
доступен практически в любом контексте, в котором бы вы не захотели получить ресурсы.
{{domxref("WindowOrWorkerGlobalScope.fetch","Fetch()")}} promise (обещание) завершается {{jsxref("TypeError")}}, если возникает сетевая ошибка, хотя обычно это означает проблему с доступами или аналогичную ей. Для успешного завершения fetch()
достаточно удостовериться в том, что обещание выполнено и что свойство {{domxref("Response.ok")}} имеет значение true
. HTTP статус 404 не является сетевой ошибкой.
Метод fetch()
контролируется директивой connect-src
directive of Content Security Policy (политика безопасности контента), а не директивой ресурсов, которые извлекает.
На Заметку: Аргументы метода fetch()
идентичны аргументам {{domxref("Request.Request","Request()")}} конструктора.
Promise<Response> fetch(input[, init]);
blob:
и data:
, как схемы.method
: Метод запроса, например, GET
, POST
.headers
: Заголовки, содержащиеся в объекте {{domxref("Headers")}} или в объекте литерале с побитовыми значениями ({{domxref("ByteString")}}).body
: Тело запроса, которое может быть: {{domxref("Blob")}}, {{domxref("BufferSource")}}, {{domxref("FormData")}}, {{domxref("URLSearchParams")}}, или {{domxref("USVString")}} объектами. Обратите внимание, что GET
или HEAD
запрос не может иметь тела.mode
: Режим, например, cors
, no-cors
или same-origin
.credentials
: Полномочия: omit
, same-origin
или include
. Для автоматической отправки куки для текущего домена, эта опция должна быть указана. Начиная с Chrome 50, это свойство также принимает экземпляр класса {{domxref("FederatedCredential")}} или {{domxref("PasswordCredential")}}.cache
: Режим кэширования запроса default
, no-store
, reload
, no-cache
, force-cache
или only-if-cached
.redirect
: Режим редиректа: follow
(автоматически переадресовывать), error
(прерывать перенаправление ошибкой) или manual
(управлять перенаправлениями вручную). В Chrome по дефолту стоит follow
(ранее, в Chrome 47, стояло manual
).referrer
: {{domxref("USVString")}}, определяющая no-referrer
, client
или a URL. Дефолтное значение - client
.referrerPolicy
: Определяет значение HTTP заголовка реферера. Может быть: no-referrer
, no-referrer-when-downgrade
, origin
, origin-when-cross-origin
, unsafe-url
.integrity
: Содержит значение целостности субресурсов (subresource integrity) запроса (например, sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=
).keepalive
: Эта опция может быть использована, чтобы разрешить запросу "пережить" страницу. Получение ресурсов с флагом keepalive
- это альтернатива {{domxref("Navigator.sendBeacon()")}} API. signal
: Экземпляр объекта {{domxref("AbortSignal")}}; позволяет коммуницировать с fetch запросом и, если нужно, отменять его с помощью {{domxref("AbortController")}}.{{domxref("Promise")}}, содержащий {{domxref("Response")}} объект (ответ на запрос).
Тип | Описание |
---|---|
AbortError |
Запрос был отменен (используя {{domxref("AbortController.abort()")}}). |
TypeError |
Начиная с версии Firefox 43, fetch() завершится ошибкой TypeError , если URL имеет такие полномочия, как http://user:password@example.com . |
В нашем Fetch Request примере (см. Fetch Request live) мы создаем новый объект {{domxref("Request")}} (запроса), используя релевантный конструктор, а затем получаем его вызовом fetch()
. Так как запрашиваемый ресурс - изображение, для того, чтобы присвоить ему подходящий MIME тип и обработать должным образом, мы применяем к ответу метод {{domxref("Body.blob()")}}, после чего создаем для него Object URL и передаем ее в элемент {{htmlelement("img")}}.
var myImage = document.querySelector('img'); var myRequest = new Request('flowers.jpg'); fetch(myRequest).then(function(response) { return response.blob(); }).then(function(response) { var objectURL = URL.createObjectURL(response); myImage.src = objectURL; });
В нашем Fetch with init then Request примере (см. Fetch Request init live) мы делаем тоже самое, за исключением того, что передаем в качестве аргумента для fetch()
объект init:
var myImage = document.querySelector('img'); var myHeaders = new Headers(); myHeaders.append('Content-Type', 'image/jpeg'); var myInit = { method: 'GET', headers: myHeaders, mode: 'cors', cache: 'default' }; var myRequest = new Request('flowers.jpg'); fetch(myRequest,myInit).then(function(response) { ... });
Обратите внимание, что объект init в качестве аргумента можно передать и в конструктор Request
для получения аналогичного результата, например:
var myRequest = new Request('flowers.jpg', myInit);
Допустимо использования объекта литерала в качестве headers
в init
.
var myInit = { method: 'GET', headers: { 'Content-Type': 'image/jpeg' }, mode: 'cors', cache: 'default' }; var myRequest = new Request('flowers.jpg', myInit);
Спецификация | Статус | Комментарий |
---|---|---|
{{SpecName('Fetch','#fetch-method','fetch()')}} | {{Spec2('Fetch')}} | Частично определена в новейшей спецификации WindowOrWorkerGlobalScope . |
{{SpecName('Fetch','#dom-global-fetch','fetch()')}} | {{Spec2('Fetch')}} | Первоначальное определение |
{{SpecName('Credential Management')}} | {{Spec2('Credential Management')}} | Добавлена возможность установить экземпляр класса {{domxref("FederatedCredential")}} или {{domxref("PasswordCredential")}} как возможное значение для init.credentials . |
{{Compat("api.WindowOrWorkerGlobalScope.fetch")}}