--- title: Fetch API slug: Web/API/Fetch_API tags: - API - Fetch - Response - XMLHttpRequest - request - Главная - Справка - Экспериментальная translation_of: Web/API/Fetch_API ---
{{DefaultAPISidebar("Fetch API")}}
Fetch API предоставляет интерфейс для получения ресурсов (в том числе по сети). Он покажется знакомым любому, кто использовал {{DOMxRef("XMLHttpRequest")}}, но новый API является более мощным и гибким набором функций.
Fetch обеспечивает обобщённое определение объектов {{DOMxRef("Request")}} и {{DOMxRef("Response")}} (и других вещей, связанных с сетевыми запросами). Это позволит им использоваться везде, где необходимо в будущем, в том числе и для service workers, Cache API и других подобных технологий, которые обрабатывают или изменяют запросы (requests) и ответы (responses), а так же в любых других случаях, которые могут потребовать от вас генерировать свой собственный ответ программно.
Это также предоставляет определение в отношение таких понятий, как CORS и семантика заголовков HTTP origin, заменяя их обособленные определения где бы то ни было.
Чтобы создать запрос и получить данные, используется метод {{DOMxRef("GlobalFetch.fetch")}}. Он реализован во множестве интерфейсов, в том числе в {{DOMxRef("Window")}} и {{DOMxRef("WorkerGlobalScope")}}. Это позволяет использовать его практически в любом контексте для получения данных.
Метод fetch()
принимает один обязательный аргумент — путь к данным, которые вы хотите получить. Он возвращает promise, который разрешается в ({{DOMxRef("Response")}}) независимо от того, был ли запрос удачным. Вы можете также передать во втором аргументе необязательный объект с указанием опций (см. {{DOMxRef("Request")}}.)
Как только {{DOMxRef("Response")}} выполнится успешно, становятся доступными несколько методов для определения тела контента и, как его содержимое должно быть обработано (см. {{DOMxRef("Body")}}.)
Вы можете создавать запрос и ответ непосредственно, используя конструкторы {{DOMxRef("Request.Request","Request()")}} и {{DOMxRef("Response.Response","Response()")}}, но маловероятно, что в этом есть необходимость. Напротив, более вероятно, что они будут созданы как результат работы другого API (например, {{DOMxRef("FetchEvent.respondWith")}} в service workers.)
Спецификации fetch()
отличаются от jQuery.ajax()
тремя основными способами:
Промис, возвращённый из fetch()
, не будет отвергнут при статусе ошибки HTTP, даже если ответ является HTTP 404
или 500
. Вместо этого, оно будет разрешаться нормально (со статусом ok
установленным в false
), и будет отклоняться только при сбое в сети или если что-то помешало завершению запроса.
fetch()
может получать межсайтовые куки-файлы; таким образом вы можете установить межсайтовую сессию используя fetch
.
fetch()
не будет посылать куки-файлы, если только не указано credentials: 'same-origin'
.Браузеры начали добавлять экспериментальную поддержку для {{domxref("AbortController")}} и {{domxref("AbortSignal")}} интерфейсов (aka The Abort API), которые позволяют прерывать операции, такие как Fetch и XHR, если они ещё не завершены. Подробности смотрите на страницах интерфейсов.
fetch()
, используемый для получения ресурсов.{{Compat("api.WindowOrWorkerGlobalScope.fetch")}}