描述
function fetch(request: string | Request, requestInit?: RequestInit): Promise<Response>
参数
参数名称 | 类型 | 必填 | 说明 |
Request | 是 | 指定将要获取的请求资源。 | |
RequestInit | 否 |
高级功能
使用
fetch 时,可以通过传入特定参数实现更精细的控制和定制化逻辑。主要包含访问 EdgeOne 节点缓存或回源,图片处理,重定向。访问 EdgeOne 节点缓存或回源
当客户端访问某个已接入 EdgeOne 站点的加速域名 时(如:
www.example.com ),同时该请求触发了边缘函数执行,此时在该边缘函数中实现 fetch(www.example.com) 请求,该请求将访问 EdgeOne 节点缓存,若不存在缓存,则进行回源。说明:
fetch 访问 EdgeOne 节点缓存与回源,需满足以下条件1. 客户端访问 EdgeOne 接入站点的加速域名,同时该请求触发了边缘函数执行。
2.
fetch(request) 指定的 request.url 中的 HOST 和客户端请求 URL 中的 HOST 相同。3.
fetch(request) 指定的 request.headers.host 和客户端请求头 HOST 值相同。fetch(event.request) 获取 EdgeOne 缓存与回源。addEventListener('fetch', (event) => {// fetch(event.request) 获取 EdgeOne CDN 缓存与回源。const response = fetch(event.request);event.respondWith(response);});
fetch(url) 获取 EdgeOne 缓存与回源。addEventListener('fetch', (event) => {event.respondWith(handleEvent(event));});async function handleEvent(event) {const { request } = event;const urlInfo = new URL(request.url);// 回源 URL 改写const url = `${urlInfo.origin}/h5/${urlInfo.pathname}`;// fetch(url) 获取 EdgeOne CDN 缓存与回源。const response = await fetch(url);return response;}
图片处理
说明:
使用
fetch(request, requestInit) 实现图片处理时,需要同时满足 fetch 获取 EdgeOne 节点缓存与回源的条件。超时时间设置
fetch 支持通过 requestInit.eo.timeoutSetting 配置请求的超时时间,默认超时时间为15秒,最大可设置为300秒。fetch(url, {eo: {timeoutSetting: {connectTimeout: 60000, // 建立连接的超时时间,单位:毫秒readTimeout: 60000, // 读取响应的超时时间,单位:毫秒writeTimeout: 60000, // 发送请求的超时时间,单位:毫秒}}})
重定向
fetch 的默认行为是自动跟随重定向,即第二个参数 requestInit.redirect 属性默认值为 follow。在以下场景中可能导致问题:1. 登录/认证场景:源站在重定向响应中设置
Set-Cookie 头(如登录成功后返回 302 并设置会话 Cookie),自动跟随重定向会导致 Cookie 无法正确传递给客户端;2. 相对路径资源加载:源站将首页重定向到子目录(如
/ 重定向到 /subdir/index.html),若页面中的 CSS/JS 等资源使用相对路径,自动跟随重定向会导致客户端基于原始路径加载资源,可能导致路径错误;3. 需要自定义重定向逻辑:需要在重定向前后执行特定操作(如日志记录、修改重定向目标等)。
若您的业务涉及到以上场景,请将
redirect 参数设置为 manual。边缘函数将直接返回重定向响应给客户端,由客户端执行重定向。const response = await fetch(url, { redirect: 'manual' });
重定向规则遵从 Web APIs 标准 Fetch API,针对不同状态码有不同的跟随规则:
状态码 | 重定向规则 |
301、302 | POST 方法被转为 GET 方法。 |
303 | 除 HEAD / GET 外的所有方法都被转为 GET 方法。 |
307、308 | 保留原始方法。 |
注意
重定向的地址来源于响应头
Location,若无该响应头,则不会重定向。响应头
Location 值可以是绝对 URL 或者相对 URL,详情参见 RFC-3986: URI Reference。运行时限制
边缘函数中使用
fetch 发起请求,存在以下限制:次数限制:边缘函数单次运行中可发起的
fetch 总次数为 64,超过该限制的 fetch 请求会失败,并抛出异常。并发限制:边缘函数单次运行中允许发起
fetch 最大并发数为 8,超过该限制的 fetch 请求会被延迟发起,直到某个正在运行着的 fetch 被 resolve。时间限制:边缘函数中使用
fetch发起请求的默认超时时间为15秒,最大可设置为300秒。注意
每一次重定向都会计入请求次数,且其优先级高于新发起的
fetch 请求。相关参考