更新时间:2024-08-14 19:50:32
Response 对象表示一个 HTTP 响应,是 Fetch API 的一部分。 它包含响应的状态码、状态信息、头部和响应体等信息。 您可以在 Edge Cloud Apps 函数中使用 Response 对象来构建自定义的 HTTP 响应,并将其返回给客户端。
const response = new Response(body?, init?);
body (可选):
定义响应体内容的对象。可以是 null 或以下类型之一:
stringArrayBufferBlobReadableStreamFormDatainit (可选):
一个选项对象,包含要应用于响应的自定义设置。
有效的选项包括:
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
响应的类型。其值可以是 basic、cors、error 或 opaque。
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 作为响应的主体将导致使用分块编码。