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,从Chrome47开始是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对象