更新时间:2026-05-18 15:35:12
Request 接口表示一个 HTTP 请求,是标准 Fetch API 的核心组成部分。在 Edge Cloud Apps 中,您可以通过 Request 对象来读取客户端发起的请求信息,或构造新的请求以发起子请求(Subrequest)。
let request = new Request(input [, init])
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | Request |
是 | 可以是包含目标 URL 的字符串,或者是一个已存在的 Request 对象(此时将创建一个副本)。 |
| init | RequestInit |
否 | 可选的配置对象,包含用于自定义该 Request 的各项设置(见下方说明)。 |
RequestInit 对象属性:
string): HTTP 请求方法,例如 GET、POST 等。默认为 GET。Headers): 一个 Headers 对象或包含键值对的对象,用于设置请求头。string | ReadableStream | FormData | URLSearchParams): 请求体内容。如果是 GET 或 HEAD 请求,则不能包含 body。string): 设置请求的重定向模式,可选值为 follow、error 或 manual。通过构造函数新建 Request 对象时,默认值为 follow。
注意: 对于通过
FetchEvent传入的原始客户端请求(event.request),其默认重定向模式为manual。
注意: 传入的原始请求对象(即
event.request)的所有属性均为只读 (read-only)。如果您需要修改传入的请求,请使用new Request(event.request, { ...修改选项 })创建一个新的 Request 副本。
ReadableStream, 只读)Boolean, 只读)true。Headers, 只读)Headers 对象。
重要提示(Cookie 处理): 与浏览器环境不同,边缘函数对允许发送的请求头几乎没有限制。边缘函数不会像浏览器那样自动管理 Cookie 状态,而是将
Cookie视为普通的请求头进行透传和处理。重要提示(重定向头转发): 如果响应为重定向,且重定向模式设置为
follow,所有请求头(包括Cookie、Authorization等敏感头部)都将被转发到重定向目标,即使目标域名不同。如果不希望出现此行为,请将redirect模式设置为manual并自行实现重定向逻辑。
string, 只读)GET、POST 等。string, 只读)follow、error 或 manual)。当设置为 follow 时,fetch() 方法会自动跟随 3xx 重定向;当设置为 manual 时,3xx 重定向响应将原样返回给调用方。string, 只读)以下方法可用于读取和处理 Request 实例的内容:
Promise<Request>Request 对象的一个完整副本。Promise<ArrayBuffer>ArrayBuffer 的 Promise。Promise<FormData>FormData 对象的 Promise(通常用于处理表单提交)。Promise<Object>Promise<string>当您将一个返回 Response 的 Promise 传递给 fetch 事件的 event.respondWith() 方法时,在该 Promise 完成之前,所有运行的异步任务都可以安全地访问活跃的请求上下文。
通常,您会将事件传递给一个异步处理函数,如下所示:
addEventListener("fetch", event => {
// 正确:将 event.request 传递给异步处理函数
event.respondWith(requestHandler(event.request));
});
// 此处属于全局作用域,不可访问特定请求的上下文
async function requestHandler(request) {
// 此处 Request 上下文处于活跃状态,可安全使用
console.log("请求 URL: ", request.url);
return new Response("Hello, Edge Cloud Apps!");
}
在边缘函数脚本初始化启动期间(全局作用域),若尝试调用 fetch() 等 API 或访问特定的 Request 上下文,将会抛出异常。
// 错误示例:在全局作用域中发起 fetch 请求
const promise = fetch("https://example.com/");
addEventListener("fetch", event => {
// ...
});
上述代码在脚本加载时就会抛出异常,导致后续的 fetch 事件监听器无法被正确注册。所有的 fetch() 调用和请求处理必须在事件回调函数内部进行。
在发起请求时,Content-Length 头部将由运行时根据 Request 的数据源自动计算并设置。用户代码在 Headers 中手动设置的任何 Content-Length 值都将被忽略。
Content-Length,Request 的 body 必须是明确固定长度的数据类型(如 FixedLengthStream、字符串 string 或 TypedArray)。ReadableStream 作为请求体时,运行时将自动采用分块传输编码(Transfer-Encoding: chunked)进行传输。