function fetch(request: string | Request, requestInit?: RequestInit): Promise<Response>
参数名称 | 类型 | 必填 | 说明 |
Request | 是 | 指定将要获取的请求资源。 | |
RequestInit | 否 |
fetch 时,可以通过传入特定参数实现更精细的控制和定制化逻辑。主要包含访问 EdgeOne 节点缓存或回源,图片处理,重定向。www.example.com ),同时该请求触发了边缘函数执行,此时在该边缘函数中实现 fetch(www.example.com) 请求,该请求将访问 EdgeOne 节点缓存,若不存在缓存,则进行回源。fetch 访问 EdgeOne 节点缓存与回源,需满足以下条件:fetch(request) 指定的 request.url 中的 HOST 和客户端请求 URL 中的 HOST 相同。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 的默认行为是自动跟随重定向,即第二个参数 requestInit.redirect 属性默认值为 follow。在以下场景中可能导致问题:Set-Cookie 头(如登录成功后返回 302 并设置会话 Cookie),自动跟随重定向会导致 Cookie 无法正确传递给客户端;/ 重定向到 /subdir/index.html),若页面中的 CSS/JS 等资源使用相对路径,自动跟随重定向会导致客户端基于原始路径加载资源,可能导致路径错误;redirect 参数设置为 manual。边缘函数将直接返回重定向响应给客户端,由客户端执行重定向。fetch(request, requestInit) 实现图片处理时,需要同时满足 fetch 获取 EdgeOne 节点缓存与回源的条件。fetch 支持通过 requestInit.eo.timeoutSetting 配置请求的超时时间,默认超时时间为15秒,最大可设置为300秒。fetch(url, {eo: {timeoutSetting: {connectTimeout: 60000, // 建立连接的超时时间,单位:毫秒readTimeout: 60000, // 读取响应的超时时间,单位:毫秒writeTimeout: 60000, // 发送请求的超时时间,单位:毫秒}}})
状态码 | 重定向规则 |
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 请求。文档反馈