You need to enable JavaScript to run this app.
导航

fetch

最近更新时间2024.04.09 14:14:16

首次发布时间2023.02.15 19:04:53

介绍

fetch函数用于在边缘函数中发起一个HTTP/HTTPS请求。详细定义及用法参见MDN官方文档fetch()

使用限制

  • 请求使用基于协议的默认端口。其中HTTP请求的默认端口为80,HTTPS请求的默认端口为443。
  • 请求地址目前只支持域名,不支持IP地址。
  • 请求地址中不能省略scheme。例如fetch("www.example.com") 会导致错误,您需要将其修改为fetch("https://www.example.com")

常见用法

3xx跟随重定向

fetch支持3xx跟随重定向,使用方法与MDN标准一致,您可以指定以下3xx跟随行为:

  • {redirect: "manual"}(默认值):表示不执行跟随,您可以手动处理重定向
  • {redirect: "follow"}:表示开启3xx跟随。对于同一个请求,fetch默认会跟随最多 4 次重定向,并且允许跨域名和跨协议的重定向。
  • {redirect: "error"}:表示在遇到重定向时直接抛出错误。

针对不同状态码有不同的跟随规则:

状态码

重定向规则

301、302、303、308

重定向的请求方法被更改为 GET 方法,请求的body内容被忽略。

307

只跟随GET方法。如果使用其他HTTP方法发起请求,将会抛出错误,不会自动跟随重定向。

重定向地址是从Location响应头中获取的。Location头目前接受逗号 , 分割的列表,但是只有第一个URL会被选择跟随,其他URL会被忽略。

解压缩

为了方便您在运行时环境中操作响应的数据,fetch会默认自动解压缩被压缩过的数据。您也可以修改fetch的默认解压缩行为。

说明

当前的运行时环境中并未添加对请求数据进行压缩的功能,如果您希望fetch的数据保持压缩状态,并且不需要更改payload,您可以在fetch时关闭decompress功能。

  • {decompress: "manual"}:表示不要解压缩,直接返回原数据。
  • {decompress: "fallbackIdentity"}:表示自动解压缩,如果遇到无法解压缩的算法,直接返回原来的数据。
  • {decompress: "decompress"}:表示自动解压缩,如果遇到无法解压缩的算法,将会报错。

目前fetch只能解压缩gzip格式文件。fetch会通过回复的content-encoding识别压缩格式。

  • content-encoding:gzip 数据会被识别为gzip压缩。
  • content-encoding:gzip, identity 数据会被识别为gzip压缩。
  • content-encoding:brotli,gzip 数据会被识别,但如果数据被压缩两次,只会解压gzip格式压缩的最外层数据。

解压缩后,fetch会按照以下形式修改content-encoding

  • content-encoding:identity,gzip会被改写为content-encoding:identity
  • content-encoding:gzip会被整个删除 。
  • content-encoding:gzip,identity会被整个删除。

注意

解压缩后,content-length不再反映您的真实数据大小。为防止在透传请求的时候错误发送数据,content-length会被运行时删除,同时增加头:X-content-length-before-decompression 保留解压缩之前的数据大小。