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

瀏覽器相容性

另見