Spec-Zone.ru › Web APIs

Метод fetch() объекта Window

Базовая поддержка Широко доступно *

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с марта 2017 года.

* Некоторые части этой функции могут иметь различный уровень поддержки.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Метод fetch() интерфейса Window запускает процесс получения ресурса из сети, возвращая промис, который выполняется после получения ответа.

Промис разрешается объектом Response, представляющим ответ на ваш запрос.

Промис fetch() отклоняется только в случае ошибки запроса, например, из-за неправильно сформированного URL запроса или ошибки сети. Промис fetch() не отклоняется, если сервер отвечает кодами HTTP-статуса, указывающими на ошибки (404, 504, и т. д.). Вместо этого обработчик then() должен проверить свойства Response.ok и/или Response.status.

Метод fetch() контролируется директивой connect-src политики безопасности контента Content Security Policy, а не директивами ресурсов, которые он получает.

Примечание: Параметры метода fetch() идентичны параметрам конструктора Request().

Синтаксис

fetch(resource)
fetch(resource, options)

Параметры

resource

Определяет ресурс, который требуется получить. Это может быть:

  • Строка или любой другой объект со строковым преобразованием — включая объект URL — который предоставляет URL ресурса, который необходимо получить. URL может быть относительным к базовому URL, который является baseURI в контексте окна или WorkerGlobalScope.location в контексте работника.
  • Объект Request.
options Необязательно

Объект RequestInit содержащий любые пользовательские настройки, которые нужно применить к запросу.

Возвращаемое значение

Промис Promise, который разрешается объектом Response.

Исключения

AbortError DOMException

Запрос был прерван из-за вызова метода AbortController abort().

NotAllowedError DOMException

Выбрасывается, если использование API тем (Topics API) запрещено политикой browsing-topics политики разрешений (Permissions Policy), и был сделан запрос fetch() с параметром browsingTopics: true.

TypeError

Может возникнуть по следующим причинам:

Причина Примеры ошибок
Заблокировано политикой разрешений Использование API отслеживания атрибуции (Attribution Reporting API) заблокировано политикой attribution-reporting политики разрешений (Permissions-Policy), и был сделан запрос fetch() с параметром attributionReporting.
Неверное имя заголовка.
// space in "C ontent-Type"
const headers = {
  'C ontent-Type': 'text/xml',
  'Breaking-Bad': '<3',
};
fetch('https://example.com/', { headers });
        
Неверное значение заголовка. Объект заголовка должен содержать ровно два элемента.
const headers = [
  ['Content-Type', 'text/html', 'extra'],
  ['Accept'],
];
fetch('https://example.com/', { headers });
        
Неверный URL или схема, или использование схемы, которую fetch не поддерживает, или использование схемы, которая не поддерживается для определенного режима запроса.
fetch('blob://example.com/', { mode: 'cors' });
        
URL содержит учетные данные.
fetch('https://user:password@example.com/');
        
Неверный URL referer.
fetch('https://example.com/', { referrer: './abc\u0000df' });
        
Неверные режимы (navigate и websocket).
fetch('https://example.com/', { mode: 'navigate' });
        
Если режим кеширования запроса — "только-из-кеша", а режим запроса — не "с-тем-же-происхождением".
fetch('https://example.com/', {
  cache: 'only-if-cached',
  mode: 'no-cors',
});
        
Если метод запроса — неверное имя токена или один из запрещенных заголовков ('CONNECT', 'TRACE' или 'TRACK').
fetch('https://example.com/', { method: 'CONNECT' });
        
Если режим запроса — "no-cors", а метод запроса — не безопасный метод CORS ('GET', 'HEAD', или 'POST').
fetch('https://example.com/', {
  method: 'CONNECT',
  mode: 'no-cors',
});
        
Если метод запроса — 'GET' или 'HEAD' и тело — не null или не undefined.
fetch('https://example.com/', {
  method: 'GET',
  body: new FormData(),
});
        
Если fetch генерирует ошибку сети.

Примеры

В нашем примере с запросом Fetch (см. живой пример запроса Fetch) мы создаём новый объект Request с помощью соответствующего конструктора, а затем получаем его с помощью вызова fetch(). Поскольку мы получаем изображение, мы применяем метод Response.blob() к ответу, чтобы установить правильный тип MIME, а затем создаём URL объекта и отображаем его в элементе <img>.

const myImage = document.querySelector("img");

const myRequest = new Request("flowers.jpg");

window
  .fetch(myRequest)
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }

    return response.blob();
  })
  .then((response) => {
    myImage.src = URL.createObjectURL(response);
  });

В нашем примере запроса Fetch с параметрами (см. живой пример запроса Fetch с параметрами) мы делаем то же самое, но передаём объект options при вызове fetch(). В этом случае мы можем установить значение Cache-Control, чтобы указать, какие кэшированные ответы нам подходят:

const myImage = document.querySelector("img");
const reqHeaders = new Headers();

// A cached response is okay unless it's more than a week old
reqHeaders.set("Cache-Control", "max-age=604800");

const options = {
  headers: reqHeaders,
};

// Pass init as an "options" object with our headers.
const req = new Request("flowers.jpg", options);

fetch(req).then((response) => {
  // ...
});

Также можно передать объект init вместе с конструктором Request для достижения того же эффекта:

const req = new Request("flowers.jpg", options);

Также можно использовать объект-литерал как headers в вызове init:

const options = {
  headers: {
    "Cache-Control": "max-age=60480",
  },
};

const req = new Request("flowers.jpg", options);

Спецификации

Спецификация
Fetch
# fetch-method

Совместимость браузеров

Рабочий стол Мобильный телефон
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari в IOS Samsung Internet WebView Android
fetch 42 14 39 29 10.1 42 39 29 10.3 4.0 42
authorization_removed_cross_origin Нет Нет 111 Нет 16.1 Нет 111 Нет 16.1 Нет Нет
blob_data_support 48 79 39 35 10.1 48 39 35 10.3 5.0 43
body_readablestream 105 105 Нет 91 Нет 105 Нет 72 Нет 20.0 105
init_attributionReporting_parameter 125 125 Нет 111 Нет 125 Нет 83 Нет 27.0 125
init_browsingTopics_parameter 115 115 Нет 101 Нет 115 Нет 77 Нет 23.0 115
init_duplex_parameter 105 105 Нет 91 Нет Нет Нет Нет Нет Нет Нет
init_keepalive_parameter 66 15 133 53 13 66 133 47 13 9.0 66
init_priority_parameter 101 101 Нет 87 17.2 101 Нет 70 17.2 19.0 101
init_referrerPolicy_parameter 52 79 52 39 11.1 52 52 41 Нет 6.0 52
init_signal_parameter 66 16 57 53 11.1 66 57 47 11.3 9.0 66

См. также

  • WorkerGlobalScope.fetch()
  • Fetch API
  • ServiceWorker API
  • Контроль доступа по HTTP (CORS)
  • HTTP

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API