Request接口表示一个HTTP请求,并且是Fetch API的一部分。详细定义请参见MDN官方文档Request。
最常用到Request对象的方式是FetchEvent的传入对象。
addEventListener("fetch", event => {
let request = event.request // Request object
// ...
})
需要修改Request请求对象时,可以构造一个新的请求对象,因为FetchEvent的request属性是只读的。
addEventListener("fetch", event => {
const request = event.request
const url = "https://www.ctyun.cn"
const modifiedRequest = new Request(url, {
body: request.body,
headers: request.headers,
method: request.method,
redirect: request.redirect
})
// ...
})
构造函数
let request = new Request(input [, init])
- 参数
- input
string
|Request
- 包含URL的字符串或Request对象。
- init
RequestInit
- 可选,包含要应用于的设置Request。
- input
- RequestInit
- method
string
- 可选,请求的方法 (GET, POST等)
- headers
Headers
- 可选,Headers对象。
- body
string
|ReadableStream
|FormData
|URLSearchParams
- 可选,请求正文。
- redirect
string
- 可选,请求重定向策略,可取值为follow,error或者manual,默认值为undefined。
- method
属性
FetchEvent传入的Request对象(即event.request)的所有属性均为只读。如果要修改请求必须创建一个新Request对象,然后将要修改的选项传递给构造函数。
- body
ReadableStream
- 只读,请求正文流。
- bodyUsed
Boolean
- 只读,判断是否已在响应中使用该正文。
- headers
Headers
- 只读,Headers对象。
- method
string
- 只读,请求的方法 (GET,POST等)。
- url
string
- 只读,这个请求的URL。
说明Request对象的以下属性对于函数计算没有意义,暂时不考虑实现:context、credentials、destination、integrity、mode、referrer、referrerPolicy、cache。
方法
这些方法仅在Request对象实例上可用。
- clone()
Promise<Request>
- 创建Request对象的副本。
- arrayBuffer()
Promise<ArrayBuffer>
- 返回以ArrayBuffer请求正文的表示形式。
- formData()
Promise<FormData>
- 返回以FormData请求正文的表示形式(即将支持)。
- json()
Promise<Object>
- 返回使用请求正文的JSON表示形式的Promise。
- text()
Promise<string>
- 返回使用请求正文的字符串表示形式的Promise。
示例
常见用法
- 获得请求方法:request.method。
- 获得请求url:request.url。
- 获得请求头:request.header。
- 获得请求负载:request.body,body是一个ReadableStream对象。
- 获得JSON:await request.json()。
- 获得表单数据:await request.formData()。
- 获得UTF8字符串:await request.text()。
尝试访问非活动Request上下文时将出错
在脚本启动期间尝试使用fetch()或访问Request上下文的任何尝试都会引发异常:
const promise = fetch("https://www.ctyun.cn/") // Error
async function eventHandler(event){..}
注意此代码段将在脚本启动期间抛出异常,并且"fetch"事件侦听器将永远不会被注册。
相关参考
示例代码:HTTP路由器
示例代码:边缘身份验证
示例代码:UA黑白名单
示例代码:Referer防盗链
示例代码:时间戳防盗链
示例代码:请求改写