Fetch API基本概念
所述Fetch API提供了用于获取资源(包括通过网络)的接口。任何使用过 XMLHttpRequest 的人似乎都会对Fetch API感到熟悉,但它提供了一个更强大和更灵活的功能集。本文解释了Fetch API的一些基本概念。
本文将随着时间的推移而添加。如果您发现您认为需要更好解释的Fetch概念,请在W3Cschool编程问答中提出您的疑问。
Fetch API简述
简单来说,Fetch的核心是HTTP Requests,Responses Headers和Bodypayload 的接口抽象,以及一个用于启动异步资源请求的全局fetch方法。由于HTTP的主要组件被抽象为JavaScript对象,所以其他API可以很容易利用这些功能。
Service Workers是大量使用Fetch API的一个示例。
Fetch将这种请求的异步性质进一步提升了一步。API是完全基于Promise的。
Guard
Guard是Headers对象的一个特征,具有可能的值有:immutable,request,request-no-cors,response或none,具体取决于header被使用的地方。
当使用Headers()构造函数创建新的Headers对象时,其Guard被设置为none(默认值)。当一个Request或一个Response对象被创建时,它有一个关联的Headers对象,它的Guard设置如下:
新对象的类型 | 创建构造函数 | 关联Headers 对象的Guard设置 |
---|---|---|
Request | Request() | request |
Request() 使用no-cors 的mode | request-no-cors | |
Response | Response() | response |
error() 或redirect() 方法 | immutable |
一个header的Guard影响set()、delete()和append()方法,它改变了header的内容。如果你试图修改其Guard是immutable的Headers对象,则会引发 TypeError。不过,如果这个操作会在下列情况中起作用:
- Guard是request和header名称不是一个禁止的header名称。
- Guard是request-no-cors并且header的name/value是一个简单的header。
- Guard是response和header名称不是一个禁止响应header名称。