Fetch API
fetch
是基于promise
的异步获取资源接口,支持promise
的所有方法,MDN
参数
第一个参数:获取资源的
URL
。
第二个参数:
options
对象,包括:
method
: 请求使用的方法,如GET、POST
。headers
: 请求的头信息,形式为Headers
的对象或包含ByteString
值的对象字面量。body
: 请求的body
信息:可能是一个Blob
、BufferSource
、FormData
、URLSearchParams
或者USVString
对象。注意GET
或HEAD
方法的请求不能包含body
信息。mode
: 请求的模式,如cors
、no-cors
或者same-origin
。credentials
: 请求的credentials
,如omit
、same-origin
或者include
。为了在当前域名内自动发送cookie
, 必须提供这个选项, 从Chrome 50
开始, 这个属性也可以接受FederatedCredential
实例或是一个PasswordCredential
实例。cache
: 请求的cache
模式:default
、no-store
、reload
、no-cache
、force-cache
或者only-if-cached
。redirect
: 可用的redirect
模式:follow
(自动重定向),error
(如果产生重定向将自动终止并且抛出一个错误), 或者manual
(手动处理重定向). 在Chrome
中,Chrome 47
之前的默认值是follow
,从Chrome
47开始是manual
。referrer
: 一个USVString
,可以是no-referrer
、client
或一个URL
。默认是client
。referrerPolicy
: 指定引用HTTP
标头的值。可能是以下之一no-referrer
、no-referrer-when-downgrade
、origin
、origin-when-cross-origin
、unsafe-url
.integrity
: 包括请求的 subresource integrity 值(例如:sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=
)。
上面诸多 option 中,其实常用的就是 method、headers、body 以及 mode 等
headers
可以为 Headers
对象,也可以是一个对象字面量,通常情况下对象字面量就足够
const url = 'https://......';
const headers = {
Accept: 'image/jpeg',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
fetch(url, { headers }).then(function () {
// ...
})
2
3
4
5
6
7
8
9
10
mode
same-origin
表示必须同源,绝对禁止跨域,这个是老版本浏览器默认的安全策略。cors
表示允许跨域,顾名思义它是以CORS
的形式跨域;当然该模式也可以同域请求。只需要服务器的响应头中带有Access-Control-Allow-Origin: *
就行。no-cors
这个就很特殊了,字面意思是禁止以CORS
的形式跨域,其实它的效果是,对外域的请求可以发送,外域服务器无论设不设Access-Control-Allow-Origin: *
都会接收请求并处理请求,但是浏览器不接收响应,即使外域返回了内容,浏览器也当做没接到。 这个no-cors
的用途是保证数据安全。
Response
传给 then
的回调函数可以接收一个参数,这个参数就是 Response
,它的属性基本上是只读属性。
Response.clone()
创建一个Response
对象的克隆Response.error()
返回一个绑定了网络错误的新的Response
对象Response.redirect()
用另一个URL创建一个新的Response
.Response.arrayBuffer()
读取Response
对象并且将它设置为已读(因为Responses
对象被设置为了stream
的方式,所以它们只能被读取一次) ,并返回一个被解析为ArrayBuffer
格式的promise
对象Response.blob()
读取Response
对象并且将它设置为已读(因为Responses
对象被设置为了stream
的方式,所以它们只能被读取一次) ,并返回一个被解析为Blob
格式的promise
对象Response.formData()
读取Response
对象并且将它设置为已读(因为Responses
对象被设置为了stream
的方式,所以它们只能被读取一次) ,并返回一个被解析为FormData
格式的promise
对象Response.json()
读取Response
对象并且将它设置为已读(因为Responses
对象被设置为了stream
的方式,所以它们只能被读取一次) ,并返回一个被解析为JSON
格式的promise
对象Response.text()
读取Response
对象并且将它设置为已读(因为Responses
对象被设置为了stream
的方式,所以它们只能被读取一次) ,并返回一个被解析为USVString
格式的promise
对象