Fetch API vs XMLHttpRequest

2022-08-30 00:36:02

我知道Fetch API使用s,它们都允许您对服务器执行AJAX请求。Promise

我已经读到Fetch API有一些额外的功能,这些功能在(和Fetch API polyfill中)不可用,因为它基于 )。XMLHttpRequestXHR

Fetch API 还有哪些额外的功能?


答案 1

有几件事你可以用 fetch 而不是 XHR 来做:

  • 您可以将缓存 API 与请求和响应对象一起使用。
  • 您可以执行请求,从未实现 CORS 的服务器获取响应。您无法直接从JavaScript访问响应体,但可以将其与其他API(例如Cache API)一起使用;no-cors
  • 流式处理响应(使用 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

获取

  • 缺少使用文档的内置方法
  • 无方法设置超时
  • 无法覆盖内容类型响应标头
  • 如果内容长度响应标头存在但未公开,则在流式处理期间主体的总长度未知
  • 将调用信号的中止处理程序,即使请求已完成
  • 没有上传进度(支持实例,因为请求正文尚未到来ReadableStream)
  • 不支持 --允许从文件访问文件(铬)

断续器

  • 没有办法发送cookie(除了使用非标准的mozAnon标志或构造函数)AnonXMLHttpRequest
  • 无法返回实例FormData
  • 没有等效于 的模式fetchno-cors
  • 始终遵循重定向