Я знаю, что fetch использует promises, и оба из них позволяют вам выполнять запросы AJAX на сервер. Я прочитал, что fetch имеет некоторые дополнительные функции, которые недоступны в XMLHttpRequest (и в fetch polyfill, поскольку он основан на XHR). Какие дополнительные возможности имеет API-интерфейс fetch?
В чем разница между API-интерфейсом Fetch и XMLHttpRequest?
Ответ 1
Есть несколько вещей, которые вы можете сделать с помощью fetch, а не с XHR:
- Вы можете использовать API Cache с объектами запроса и ответа;
- Вы можете выполнять запросы
no-cors
, получая ответ от сервера, который не реализует CORS. Вы не можете получить доступ к телу ответа непосредственно из JavaScript, но можете использовать его с другими API (например, Cache API); - Потоковые ответы (при XHR весь ответ буферизуется в памяти, при извлечении вы сможете получить доступ к потоку низкого уровня). Это еще не доступно во всех браузерах, но скоро будет.
Есть несколько вещей, которые вы можете сделать с XHR, которые вы еще не можете сделать с помощью fetch, но они будут доступны рано или поздно (см. абзац "Будущие улучшения" здесь: https://hacks.mozilla.org/2015/03/this-api-is-so-fetching/):
- Отменить запрос (теперь это работает в Firefox и Edge, как объясняет @sideshowbarker в своем комментарии);
- Сообщить о проделанной работе.
В этой статье https://jakearchibald.com/2015/thats-so-fetch/ содержится более подробное описание.
Ответ 2
начнут извлекать h2 >
- отсутствует встроенный метод для использования документов
- Невозможно установить тайм-аут пока
- не может переопределить заголовок типа содержимого ответа
XHR
- нет способа не отправлять файлы cookie
- не может возвращать
FormData
экземпляры - не имеет эквивалента
fetch
no-cors
mode