Skip to main content

Fetch Request 接口

Fetch API 的 Request 接口用来表示资源请求。

一、Request 的构造器

  • Request.Request():创建一个新的 Request 对象。

二、Request 的属性

  • Request.method(只读):包含请求的方法(GET、POST、等)

  • Request.url(只读):包含这个请求的 URL。

  • Request.headers(只读):包含请求相关的 Headers 对象。

  • Request.context(只读): 包含请求的上下文(例如:audio、image、iframe、等)

  • Request.referrer(只读):包含请求的来源(例如:client)。

  • Request.referrerPolicy(只读):包含请求来源的策略(例如:no-referrer)。

  • Request.mode(只读):包含请求的模式(例如: cors、no-cors、same-origin、navigate)。

  • Request.credentials(只读):包含请求的证书(例如: omit、same-origin)。

  • Request.redirect(只读):包含如何处理重定向模式,它可能是一个 follow ,error 或者 manual。

  • Request.integrity(只读):包含请求的子资源的完整性值(例如: sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=)。

  • Request.cache(只读):包含请求的缓存模式(例如: default、reload、no-cache)。

  • Body.body(只读):一个简单 getter 用于曝光一个 ReadableStream 的主体内容。

  • Body.bodyUsed(只读):存储一个 Boolean 判断主体是否已经被用于一个响应中。

三、Request 的方法

  • Request.clone():创建当前 request 的副本。

  • Body.arrayBuffer():返回解决一个 ArrayBuffer 表示的请求主体的 promise。

  • Body.blob():返回解决一个 Blob 表示的请求主体的 promise。

  • Body.formData():返回解决一个 FormData 表示的请求主体的 promise。

  • Body.json():返回解决一个 JSON 表示的请求主体的 promise。

  • Body.text():返回解决一个 USVString 表示的请求主体的 promise。

四、Request 的应用

下面使用 Request () 构造函数创建一个新的 request实例(用来请求同一目录下的图片), 然后返回请求的一些属性:

const myRequest = new Request('http://localhost/flowers.jpg');

const myURL = myRequest.url; // http://localhost/flowers.jpg
const myMethod = myRequest.method; // GET
const myCred = myRequest.credentials; // omit

然后将 Request 对象作为参数传递给 GlobalFetch.fetch() 调用来获取此请求,例如:

fetch(myRequest)
.then(response => response.blob())
.then(blob => {
myImage.src = URL.createObjectURL(blob);
});

下面使用 Request() 构造函数创建了一个新的 request,其中包含一些初始数据和正文内容,用于需要主体有效载荷的 api 请求:

const myRequest = new Request('http://localhost/api', { method: 'POST', body: '{"foo":"bar"}' });

const myURL = myRequest.url; // http://localhost/api
const myMethod = myRequest.method; // POST
const myCred = myRequest.credentials; // omit
const bodyUsed = myRequest.bodyUsed;

注意:body 类型只能是一个 Blob、BufferSource、FormData、URLSearchParams、USVString 或 ReadableStream 类型,因此增加一个 JSON 对象的有效载荷则需要字符串化该对象。

例如可以通过将 Request 对象作为参数传递给 GlobalFetch.fetch() 调用来获取此 api 请求,并获得响应:

fetch(myRequest)
.then(response => {
if (response.status === 200) {
return response.json();
} else {
throw new Error('Something went wrong on api server!');
}
})
.then(response => {
console.debug(response);
// ...
}).catch(error => {
console.error(error);
});