Request 表示一个请求类,需要通过实例化来生成一个请求对象。通过该对象可以描述一个 HTTP 请求中的请求(一般含有请求头和请求体)。既然是用来描述请求对象,那么该请求对象应该具有修改请求头(Headers)和请求体(Body)的方式。

构造函数

  1. const myRequest = new Request(input[, init]);
  1. input:定义你想要 fetch 的资源。可以是下面两者之一:
  • 一个直接包含你希望 fetch 的资源的 URL 的 USVString
  • 一个 Request 对象。请注意以下行为更新,以在保留安全性的同时使构造函数不太可能引发异常:
    • 如果此对象存在于构造函数调用的另一个起源上,则将除去Request.referrer(en-US)
    • 如果此对象的导航为 Request.mode,则mode将转换为same-origin。
  1. init 可选:一个可选对象,包含希望被包括到请求中的各种自定义选项。可用的选项如下:
  • method: 请求的方法,例如:GET, POST。
  • headers: 任何你想加到请求中的头,其被放在 Headers 对象或内部值为 ByteString 的对象字面量中。
  • body: 任何你想加到请求中的body,可以是 Blob, BufferSource(en-US), FormData, URLSearchParams, USVString,或 ReadableStream 对象。注意GET 和 HEAD 请求没有 body。
  • mode: 请求的模式, 比如 cors, no-cors, same-origin, 或 navigate。默认值为 cors。
  • credentials: 想要在请求中使用的 omit, same-origin, 或 include。默认值应该为 omit。
    • 但在 Chrome 中,Chrome 47 之前的版本默认值为 same-origin ,自Chrome 47起,默认值为include。
  • cache: 请求中想要使用的 cache mode
  • redirect: 对重定向处理的模式: follow, error, or manual。在Chrome中,Chrome 47 之前的版本默认值为 manual ,自 Chrome 47 起,默认值为follow。
  • referrer: 一个指定了no-referrer, client, 或一个 URL的 USVString 。默认值是about:client。
  • integrity: 包括请求的 subresource integrity

    实例的属性

    只列举几个重要的属性,其他的看 MDN

    mode

    request.mode表示的是一个请求时否使用 CORS,还是使用严格同源模式

  • 它是一个 RequestMode 枚举类型,可取的值有 navigate, same-origin, no-cors, cors

    • 当处于跨域情况下,你应当设置为 cors
    • 该值的默认值在使用 Request 初始化时,默认为 cors
    • 当使用标记启动的嵌入式资源,例如 <link><script>标签(未手动修改 crossorigin 属性),默认为 no-cors

      详细信息请参考 whatwg 规范或 MDN 的 request.mode

credentials

**credentials** 表示的是请求是否在跨域情况下发送 cookie

  • 它是一个 RequestCredentials 枚举类型,可取的值有 omit, same-origin, include
  • 该值的默认值在使用 Request 初始化时,默认值为 same-origin
  • 当你需要跨域传递 cookie 凭证信息时,请设置它为 include

    注意这里有一个细节,当设置为 include 时,请确保 Response HeaderAccess-Control-Allow-Origin 不能为 *,需要指定具体源

body

**body**是一个 BodyInit 类型。它可取的值有 Blob,BufferSource , FormData , URLSearchParams , ReadableStream , USVString

我们常见的 json 对象却不在其中。因此,我们如果需要传递 json 的话,需要调用 JSON.stringify 函数来帮助我们转换成字符串。

  1. // 客户端
  2. const headers = new Headers({
  3. 'X-Token': 'fe9',
  4. });
  5. const request = new Request('http://127.0.0.1:4000/api/request', {
  6. method: 'GET',
  7. headers,
  8. });
  9. console.log(request); // Request {method: "GET", url: "http://127.0.0.1:4000/api/request", headers: Headers, destination: "", referrer: "about:client", …}
  10. console.log(request.method); // GET
  11. console.log(request.mode); // cors
  12. console.log(request.credentials); // same-origin
  13. // 如果你想打印headers信息,可以调用 printHeaders(request.headers)

参考资料

《Request——MDN》