Request

更新时间: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 对象属性:

  • method (string): HTTP 请求方法,例如 GETPOST 等。默认为 GET
  • headers (Headers): 一个 Headers 对象或包含键值对的对象,用于设置请求头。
  • body (string | ReadableStream | FormData | URLSearchParams): 请求体内容。如果是 GETHEAD 请求,则不能包含 body。
  • redirect (string): 设置请求的重定向模式,可选值为 followerrormanual。通过构造函数新建 Request 对象时,默认值为 follow

    注意: 对于通过 FetchEvent 传入的原始客户端请求(event.request),其默认重定向模式为 manual

属性

注意: 传入的原始请求对象(即 event.request)的所有属性均为只读 (read-only)。如果您需要修改传入的请求,请使用 new Request(event.request, { ...修改选项 }) 创建一个新的 Request 副本。

  • body (ReadableStream, 只读)
    请求体内容的数据流。
  • bodyUsed (Boolean, 只读)
    指示请求体是否已经被读取或使用过。一旦被读取,该值变为 true
  • headers (Headers, 只读)
    包含请求头部信息的 Headers 对象。

    重要提示(Cookie 处理): 与浏览器环境不同,边缘函数对允许发送的请求头几乎没有限制。边缘函数不会像浏览器那样自动管理 Cookie 状态,而是将 Cookie 视为普通的请求头进行透传和处理。

    重要提示(重定向头转发): 如果响应为重定向,且重定向模式设置为 follow,所有请求头(包括 CookieAuthorization 等敏感头部)都将被转发到重定向目标,即使目标域名不同。如果不希望出现此行为,请将 redirect 模式设置为 manual 并自行实现重定向逻辑。

  • method (string, 只读)
    请求使用的 HTTP 方法,例如 GETPOST 等。
  • redirect (string, 只读)
    当前请求的重定向模式(followerrormanual)。当设置为 follow 时,fetch() 方法会自动跟随 3xx 重定向;当设置为 manual 时,3xx 重定向响应将原样返回给调用方。
  • url (string, 只读)
    当前请求的完整 URL 字符串。

实例方法

以下方法可用于读取和处理 Request 实例的内容:

  • clone() : Promise<Request>
    创建并返回当前 Request 对象的一个完整副本。
  • arrayBuffer() : Promise<ArrayBuffer>
    读取请求体,并返回一个解析为 ArrayBuffer 的 Promise。
  • formData() : Promise<FormData>
    读取请求体,并返回一个解析为 FormData 对象的 Promise(通常用于处理表单提交)。
  • json() : Promise<Object>
    读取请求体,并返回一个解析为 JSON 对象的 Promise。
  • text() : Promise<string>
    读取请求体,并返回一个解析为 UTF-8 字符串的 Promise。

注意事项

1. 异步任务与 Request 上下文

当您将一个返回 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!");
}

2. 非活跃 Request 上下文异常

在边缘函数脚本初始化启动期间(全局作用域),若尝试调用 fetch() 等 API 或访问特定的 Request 上下文,将会抛出异常。

// 错误示例:在全局作用域中发起 fetch 请求
const promise = fetch("https://example.com/"); 

addEventListener("fetch", event => {
  // ...
});

上述代码在脚本加载时就会抛出异常,导致后续的 fetch 事件监听器无法被正确注册。所有的 fetch() 调用和请求处理必须在事件回调函数内部进行。

3. Content-Length 头部处理

在发起请求时,Content-Length 头部将由运行时根据 Request 的数据源自动计算并设置。用户代码在 Headers 中手动设置的任何 Content-Length 值都将被忽略。

  • 固定长度: 如果需要强制指定 Content-Length,Request 的 body 必须是明确固定长度的数据类型(如 FixedLengthStream、字符串 stringTypedArray)。
  • 分块传输: 当将其他未知长度的 ReadableStream 作为请求体时,运行时将自动采用分块传输编码(Transfer-Encoding: chunked)进行传输。

相关参考

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!