这篇文章需要文法复核。如何帮忙。
草案
本页尚未完工.
Fetch 是一个很先进的概念,类似于 XMLHttpRequest。它提供了很多 XMLHttpRequest 拥有的功能,不过它被设计成具有更强的可扩展性和更高效。这篇文章解释了 Fetch API 的一些基本概念。
Note: 这篇文章可能还需要修改。如果你觉得有的概念可以解释的更好,可以告知 dev-mdc,或 Mozilla IRC (#mdn room)。
概括
Fetch 的核心在于对 HTTP 接口的抽象,包括 Request
,Response
,Headers
,Body
,以及用于初始化异步请求的 global fetch
。得益于 JavaScript 实现的这些抽象好的 HTTP 模块,其他接口能够很方便的使用这些功能。
Service Workers 是一个利用了 Fetch 实现的接口的例子。
除此之外,Fetch 还利用到了请求的异步特性——它是基于 Promise
的。
Guard
Guard 是 Headers
对象的特性,基于不同的情况,它可以有以下取值:immutable、
request、
request-no-cors、
response 或
none。
当使用 Headers()
constructor 创建一个新的 Headers
对象的时候,它的 guard 被设置成 none(默认值)。当创建
Request
或 Response
对象的时候,它将拥有一个按照以下规则实现的与之关联的 Headers
对象:
新对象的类型 | 创建时的构造函数 | 关联的 Headers 对象的 guard |
---|---|---|
Request |
Request() |
request |
Request() ,mode 设置成 no-cors |
request-no-cors |
|
Response |
Response() |
response |
error() 或 redirect() 方法 |
immutable |
头信息的 guard 会影响 set()
、delete()
和 append()
方法。如果你试图修改 guard 是 immutable 的
Headers
对象,那么会抛出一个 TypeError。以下情况则不会抛出错误:
- guard 是
request
并且头信息中的 name 不是 forbidden header name - guard 是
request-no-cors
并且头信息中的 name/value 是 simple header - guard 是
response
并且头信息中的 name 不是 forbidden response header name