Response

更新时间:2024-08-14 19:50:32

Response 对象表示一个 HTTP 响应,是 Fetch API 的一部分。 它包含响应的状态码、状态信息、头部和响应体等信息。 您可以在 Edge Cloud Apps 函数中使用 Response 对象来构建自定义的 HTTP 响应,并将其返回给客户端。

构造函数

const response = new Response(body?, init?);

参数

  • body (可选):

    定义响应体内容的对象。可以是 null 或以下类型之一:

    • string
    • ArrayBuffer
    • Blob
    • ReadableStream
    • FormData
  • init (可选):

    一个选项对象,包含要应用于响应的自定义设置。
    有效的选项包括:

    • status: 响应的状态码,例如 200
    • statusText: 与状态码关联的状态消息,例如 OK
    • headers: 要添加到响应中的任何头部,包含在 Headers 对象或 ByteString 键值对的对象字面量中。
    • encodeBody: 指示如何压缩响应体。默认值为 "automatic",表示 Workers 会根据 Content-Encoding 头部自动压缩数据。要提供已压缩的数据,请将此属性设置为 "manual"
    • webSocket: 出现在成功的 WebSocket 握手响应中。例如,如果客户端向源站发送 WebSocket 升级请求,而 Worker 拦截该请求并将其转发到源站,并且源站以成功的 WebSocket 升级响应进行回复,则 Worker 会看到 response.webSocket。 这将建立一个通过 Worker 代理的 WebSocket 连接。请注意,您无法拦截通过 WebSocket 连接流动的数据。

属性

  • response.body

    一个获取响应体内容的 getter。

  • response.bodyUsed

    一个布尔值,指示响应体是否已在响应中使用。

  • response.headers

    响应的头部。

  • response.ok

    一个布尔值,指示响应是否成功(状态码在 200-299 范围内)。

  • response.redirected

    一个布尔值,指示响应是否为重定向的结果。如果是,则其 URL 列表包含多个条目。

  • response.status

    响应的状态码(例如,200 表示成功)。

  • response.statusText

    与状态码对应的状态消息(例如,200 对应 OK)。

  • response.type

    响应的类型。其值可以是 basiccorserroropaque

  • response.url

    响应的 URL。该值是在任何重定向之后获得的最终 URL。

  • response.webSocket

    出现在成功的 WebSocket 握手响应中。例如,如果客户端向源站发送 WebSocket 升级请求,而 Worker 拦截该请求并将其转发到源站,并且源站以成功的 WebSocket 升级响应进行回复,则 Worker 会看到 response.webSocket。 这将建立一个通过 Worker 代理的 WebSocket 连接。请注意,您无法拦截通过 WebSocket 连接流动的数据。

方法

实例方法

  • clone(): 创建 Response 对象的副本。
  • json(): 使用 JSON 序列化负载创建一个新的响应。
  • redirect(): 创建一个具有不同 URL 的新响应。

其他实例方法

Response 实现了 Fetch API 的 Body mixin,因此 Response 实例还具有以下可用方法:

  • arrayBuffer(): 获取 Response 流,将其读取到完成,并返回一个解析为 ArrayBuffer 的 Promise。
  • formData(): 获取 Response 流,将其读取到完成,并返回一个解析为 FormData 对象的 Promise。
  • json(): 获取 Response 流,将其读取到完成,并返回一个解析为将正文文本解析为 JSON 的结果的 Promise。
  • text(): 获取 Response 流,将其读取到完成,并返回一个解析为 USVString(文本)的 Promise。

设置 Content-Length 头部

Content-Length 头部将由运行时根据 Response 的数据源自动设置。 Headers 中用户代码手动设置的任何值都将被忽略。要使 Content-Length 头部具有指定的特定值,Response 的主体必须是 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 作为响应的主体将导致使用分块编码。

相关参考

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