Request 表示一个请求类,需要通过实例化来生成一个请求对象。通过该对象可以描述一个 HTTP 请求中的请求(一般含有请求头和请求体)。既然是用来描述请求对象,那么该请求对象应该具有修改请求头(Headers)和请求体(Body)的方式。
构造函数
const myRequest = new Request(input[, init]);
- input:定义你想要 fetch 的资源。可以是下面两者之一:
- 一个直接包含你希望 fetch 的资源的 URL 的 USVString。
- 一个 Request 对象。请注意以下行为更新,以在保留安全性的同时使构造函数不太可能引发异常:
- 如果此对象存在于构造函数调用的另一个起源上,则将除去Request.referrer(en-US)。
- 如果此对象的导航为 Request.mode,则mode将转换为same-origin。
- 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 moderedirect
: 对重定向处理的模式: follow, error, or manual。在Chrome中,Chrome 47 之前的版本默认值为 manual ,自 Chrome 47 起,默认值为follow。referrer
: 一个指定了no-referrer, client, 或一个 URL的 USVString 。默认值是about:client。integrity
: 包括请求的 subresource integrity 值实例的属性
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 Header
中Access-Control-Allow-Origin
不能为*
,需要指定具体源
body
**body**
是一个 BodyInit 类型。它可取的值有 Blob
,BufferSource
, FormData
, URLSearchParams
, ReadableStream
, USVString
。
我们常见的
json
对象却不在其中。因此,我们如果需要传递json
的话,需要调用JSON.stringify
函数来帮助我们转换成字符串。
// 客户端
const headers = new Headers({
'X-Token': 'fe9',
});
const request = new Request('http://127.0.0.1:4000/api/request', {
method: 'GET',
headers,
});
console.log(request); // Request {method: "GET", url: "http://127.0.0.1:4000/api/request", headers: Headers, destination: "", referrer: "about:client", …}
console.log(request.method); // GET
console.log(request.mode); // cors
console.log(request.credentials); // same-origin
// 如果你想打印headers信息,可以调用 printHeaders(request.headers)