Fetch 基本概念

Fetch 是一个现代的概念,等同于 XMLHttpRequest。它提供了许多与 XMLHttpRequest 相同的功能,但被设计成更具可扩展性和高效性。本文介绍了 Fetch API 的一些基本概念。

备注: 这篇文章可能还需要修改。如果你觉得有的概念可以解释的更好,让人们在MDN 论坛上知道,或 Mozilla IRC (#mdn room)。

简而言之

Fetch 的核心在于对 HTTP 接口的抽象,包括 RequestResponseHeadersBody,以及用于初始化异步请求的 global fetch。得益于 JavaScript 实现的这些抽象好的 HTTP 模块,其他接口能够很方便的使用这些功能。

Service Workers (en-US) 是大量使用 Fetch 的 API 的一个示例。

除此之外,Fetch 还利用到了请求的异步特性——它是基于 Promise 的。

Guard

Guard 是 Headers 对象的特性,基于不同的情况,它可以有以下取值:immutablerequestrequest-no-corsresponsenone

当使用 Headers() constructor 创建一个新的 Headers 对象的时候,它的 guard 被设置成 none(默认值)。当创建RequestResponse 对象的时候,它将拥有一个按照以下规则实现的与之关联的 Headers 对象:

新对象的类型 创建时的构造函数 关联的 Headers 对象的 guard
Request Request() request
Request()mode 设置成 no-cors request-no-cors
Response Response() response
error()redirect() 方法 immutable

头信息的 guard 会影响 set()delete()append() 方法。如果你试图修改 guardimmutableHeaders 对象,那么会抛出一个 TypeError。以下情况则不会抛出错误: