Response 接口表示 HTTP 响应,是 Fetch API 的一部分。
let response = new Response(body, init);-
bodyoptional-
定义响应正文文本的对象。可以为
null或以下任一类型:- BufferSource
- FormData
- ReadableStream
- URLSearchParams
- USVString
-
-
initoptional- 包含要应用于响应的自定义设置的
options对象。
- 包含要应用于响应的自定义设置的
options 对象的有效选项包括:
cfany | null- 包含 Cloudflare 特定信息的对象。此对象不属于 Fetch API 标准,仅在 Cloudflare Workers 中可用。此字段仅供 Response 的使用者参考,不会影响 Workers 的行为。
encodeBodystring- 传输时,Workers 必须根据
content-encoding标头压缩数据;若要提供已压缩的数据,必须将此属性设置为"manual",否则默认为"automatic"。
- 传输时,Workers 必须根据
headersHeaders | ByteString- 要添加到响应中的任何标头,包含在
Headers对象或ByteString↗ 键值对的对象字面量中。
- 要添加到响应中的任何标头,包含在
statusint- 响应的状态码,例如
200。
- 响应的状态码,例如
statusTextstring- 与状态码关联的状态消息,例如
OK。
- 与状态码关联的状态消息,例如
webSocketWebSocket | null- 在成功的 WebSocket 握手响应中存在。例如,如果客户端向源站发送 WebSocket 升级请求,Worker 拦截该请求并转发到源站,源站回复成功的 WebSocket 升级响应,Worker 会看到
response.webSocket。这会建立通过 Worker 代理的 WebSocket 连接。请注意,您无法拦截通过 WebSocket 连接传输的数据。
- 在成功的 WebSocket 握手响应中存在。例如,如果客户端向源站发送 WebSocket 升级请求,Worker 拦截该请求并转发到源站,源站回复成功的 WebSocket 升级响应,Worker 会看到
response.bodyReadable Stream- 用于获取正文内容的 getter。
response.bodyUsedboolean- 布尔值,指示响应中是否已使用正文。
response.headersHeaders- 响应的标头。
response.okboolean- 布尔值,指示响应是否成功(状态码在
200-299范围内)。
- 布尔值,指示响应是否成功(状态码在
response.redirectedboolean- 布尔值,指示响应是否为重定向的结果。如果是,其 URL 列表将包含多个条目。
response.statusint- 响应的状态码(例如,
200表示成功)。
- 响应的状态码(例如,
response.statusTextstring- 与状态码对应的状态消息(例如,
200对应OK)。
- 与状态码对应的状态消息(例如,
response.urlstring- 响应的 URL。该值为经过任何重定向后获得的最终 URL。
response.webSocketWebSocket?- 在成功的 WebSocket 握手响应中存在。例如,如果客户端向源站发送 WebSocket 升级请求,Worker 拦截该请求并转发到源站,源站回复成功的 WebSocket 升级响应,Worker 会看到
response.webSocket。这会建立通过 Worker 代理的 WebSocket 连接。请注意,您无法拦截通过 WebSocket 连接传输的数据。
- 在成功的 WebSocket 握手响应中存在。例如,如果客户端向源站发送 WebSocket 升级请求,Worker 拦截该请求并转发到源站,源站回复成功的 WebSocket 升级响应,Worker 会看到
-
clone(): Response- 创建
Response对象的克隆。
- 创建
-
json(): Response- 创建带有 JSON 序列化负载的新响应。
-
redirect(): Response- 创建带有不同 URL 的新响应。
Response 实现了 Fetch API ↗ 的 Body ↗ mixin,因此 Response 实例还额外提供以下方法:
-
arrayBuffer(): Promise<ArrayBuffer>- 获取
Response流,读取至完成,并返回一个 Promise,该 Promise 解析为ArrayBuffer↗。
- 获取
-
formData(): Promise<FormData>- 获取
Response流,读取至完成,并返回一个 Promise,该 Promise 解析为FormData↗ 对象。
- 获取
-
json(): Promise<JSON> -
text(): Promise<USVString>- 获取
Response流,读取至完成,并返回一个 Promise,该 Promise 解析为USVString↗(文本)。
- 获取
运行时将根据 Response 的数据源自动设置 Content-Length 标头。用户在 Headers 中手动设置的任何值都将被忽略。若要指定具有特定值的 Content-Length 标头,Response 的 body 必须是 FixedLengthStream 或固定长度的值(如字符串或 TypedArray)。
FixedLengthStream 是一种恒等 TransformStream,仅允许写入固定数量的字节。
const { writable, readable } = new FixedLengthStream(11);
const enc = new TextEncoder();
const writer = writable.getWriter();
writer.write(enc.encode("hello world"));
writer.end();
return new Response(readable);将任何其他类型的 ReadableStream 用作响应正文时,将使用分块编码(chunked encoding)。
Workers 对 Response 接口的实现包含对 Web 标准 Response API 的多项扩展。这些差异是有意为之,提供了 Workers 运行时特有的附加功能。
Workers 向 Response 对象添加了可选的 cf 属性。此属性可在 ResponseInit 选项中设置,供 Response 的使用者参考。它不会影响 Workers 的行为。
Workers 向 Response 对象添加了 webSocket 属性以支持 WebSocket 连接。此属性在成功的 WebSocket 握手响应中存在。有关更多信息,请参阅 WebSockets。
Workers 在 ResponseInit 中添加了 encodeBody 选项,用于控制响应正文的压缩方式。提供预压缩数据时,请将此选项设置为 "manual",以防止自动压缩。
headers 属性返回 Workers 特有的 Headers 对象,其中包含 getAll() 等附加方法,用于处理 Set-Cookie 标头。有关 Workers Headers 实现与 Web 标准差异的详细信息,请参阅 Headers 文档。
- 示例:修改响应
- 示例:条件响应
- 参考:
Request - 使用 ES modules 语法 编写 Worker 代码,以获得优化体验。