更新时间: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
响应的类型。其值可以是 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
作为响应的主体将导致使用分块编码。