Request

Baseline 广泛可用 *

此特性已得到良好确立,可跨多种设备和浏览器版本使用。自 2017 年 3 月起,所有浏览器均支持此特性。

* 此特性的某些部分可能存在不同级别的支持。

注意:此功能在 Web Workers 中可用。

Fetch API 中的 Request 接口表示一个资源请求。

您可以使用 Request() 构造函数创建一个新的 Request 对象,但更有可能遇到的是 Request 对象作为其他 API 操作的结果返回,例如 Service Worker 的 FetchEvent.request

构造函数

Request()

创建一个新的 Request 对象。

实例属性

Request.body 只读

包含请求正文内容的 ReadableStream

Request.bodyUsed 只读

存储 truefalse 来指示请求正文是否已被使用。

Request.cache 只读

包含请求的缓存模式(例如,defaultreloadno-cache)。

Request.credentials 只读

包含一个控制是否应将凭据包含在请求中的值(例如,omitsame-origininclude)。默认为 same-origin

Request.destination 只读

一个描述请求内容类型的字符串。

Request.duplex 只读 实验性

请求的双工模式,它决定了浏览器是否必须在处理响应之前发送整个请求。

Request.headers 只读

包含请求的关联 Headers 对象。

Request.integrity 只读

包含请求的 子资源完整性 值(例如,sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=)。

Request.isHistoryNavigation 只读

一个布尔值,指示该请求是否为历史导航。

Request.keepalive 只读

包含请求的 keepalive 设置(truefalse),指示在启动它的页面卸载之前,浏览器是否会保持相关的请求处于活动状态直到请求完成。

Request.method 只读

包含请求的方法(GETPOST 等)。

Request.mode 只读

包含请求的模式(例如,corsno-corssame-originnavigate)。

Request.redirect 只读

包含处理重定向的模式。它可以是 followerrormanual 之一。

Request.referrer 只读

包含请求的引用者(例如,client)。

Request.referrerPolicy 只读

包含请求的引用者策略(例如,no-referrer)。

Request.signal 只读

返回与请求关联的 AbortSignal

Request.url 只读

包含请求的 URL。

实例方法

Request.arrayBuffer()

返回一个 Promise,该 Promise 将解析为请求正文的 ArrayBuffer 表示形式。

Request.blob()

返回一个 Promise,该 Promise 将解析为请求正文的 Blob 表示形式。

Request.bytes()

返回一个 Promise,该 Promise 将解析为请求正文的 Uint8Array 表示形式。

Request.clone()

创建当前 Request 对象的一个副本。

Request.formData()

返回一个 Promise,该 Promise 将解析为请求正文的 FormData 表示形式。

Request.json()

返回一个 Promise,该 Promise 将解析为将请求正文解析为 JSON 的结果。

Request.text()

返回一个 Promise,该 Promise 将解析为请求正文的文本表示形式。

注意: 请求正文函数只能运行一次;后续调用将以 TypeError 拒绝,表明正文流已被使用。

示例

在下面的代码片段中,我们使用 Request() 构造函数创建一个新请求(用于与脚本在同一目录下的图像文件),然后返回请求的一些属性值。

js
const request = new Request("https://www.mozilla.org/favicon.ico");

const url = request.url;
const method = request.method;
const credentials = request.credentials;

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

js
fetch(request)
  .then((response) => response.blob())
  .then((blob) => {
    image.src = URL.createObjectURL(blob);
  });

在下面的代码片段中,我们使用 Request() 构造函数创建了一个带有初始数据和请求正文内容的新请求,用于需要请求正文负载的 API 请求。

js
const request = new Request("https://example.com", {
  method: "POST",
  body: '{"foo": "bar"}',
});

const url = request.url;
const method = request.method;
const credentials = request.credentials;
const bodyUsed = request.bodyUsed;

注意: 请求正文只能是 BlobArrayBufferTypedArrayDataViewFormDataURLSearchParamsReadableStreamString 对象,以及字符串字面量;因此,要将 JSON 对象添加到负载中,您需要对该对象进行字符串化。

然后,您可以将此 API 请求作为参数传递给 fetch() 调用来获取此 API 请求,例如,并获取响应:

js
fetch(request)
  .then((response) => {
    if (response.status !== 200) {
      throw new Error("Something went wrong on API server!");
    }
    return response.json();
  })
  .then((response) => {
    console.debug(response);
    // …
  })
  .catch((error) => {
    console.error(error);
  });

规范

规范
Fetch
# request-class

浏览器兼容性

另见