Fetch
描述
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 节点缓存与回源的条件。重定向
重定向规则遵从 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
请求。相关参考