返回文本、二进制和 HTML
如何从函数发送文本、图像、文件或 HTML,并使用 SDK 或纯 HTTP 读回它们。
1. 选择响应类型
| 你的函数返回 | 使用 responseType | data 是 |
|---|---|---|
| JSON | 'json'(默认) | 解析后的值 |
| 纯文本、CSV、HTML | 'text' (或 'json',也返回字符串) | 一个 string |
| 图像、PDF、任何字节 | 'blob' 或 'arrayBuffer' | Blob 或 ArrayBuffer |
默认的'json'模式可以携带JSON和文本。 不能 携带字节:如果函数以二进制内容类型应答,SDK 将返回错误 invalid_response 并告诉您选择 'blob' 或 'arrayBuffer',因此不会丢失任何内容。
2.用SDK读取
在实际运行返回字节 137,80,78,71,13,10,26,10,255,0,1的函数时, arrayBuffer 准确返回这 11 个字节,而 blob 返回 type=image/png size=11。
使用 'text'、 'blob' 或 'arrayBuffer',SDK 会跳过 JSON 信封并按原样返回函数主体。如果您的函数返回错误状态,则 error.status 是该状态,而 error.message 是您的函数返回的文本。
3. HTTP 上的原始模式
添加标头 X-Aurabase-Invoke-Mode: raw,平台将返回函数自己的响应:其状态、content-type 和字节。
如果没有该标头,响应始终是带信封的 200:
在信封中,body 是已解析的 JSON,当响应文本是 UTF-8 而不是 JSON 时,它是响应的文本;当正文为空或二进制时,null 是响应文本。
在原始模式下,函数的每个响应都带有 x-aurabase-invoke-origin: function。没有它的响应来自网关或运行时。这就是 SDK 告诉您的代码从平台中断返回的 503 的方式。
4. 哪些标头能够存活
在原始模式下,您的响应标头会被过滤,因为它们是从平台自己的源提供的。
| 标头 | 结果 |
|---|---|
content-type | 保留。如果未设置,则默认为 application/octet-stream。 |
自定义标头(x-custom-out、 cache-control、...) | 保留。 |
set-cookie | 已删除。函数无法设置 cookie。 |
access-control-* | 已删除。 CORS 由网关决定。 |
x-aura-*, x-internal-token | 已删除。 |
content-security-policy、 strict-transport-security、 x-content-type-options | 由平台设置,无论您发送什么。 |
content-length、 transfer-encoding、 connection | 重新计算。 |
可以运行脚本(text/html、 application/xhtml+xml、 image/svg+xml、 application/xml、 text/xml)的响应采用沙盒内容安全策略。返回 text/html的函数的真实响应:
您的 HTML 已被提供,但没有 cookie、存储或脚本访问您的项目的来源。使用存储或您自己的域来托管真实的网页。