Fetch

更新时间:2024-08-14 19:50:31

fetch() 方法提供了一个用于通过 HTTP 请求异步获取资源的接口,您可以在Edge Cloud Apps 函数中使用它。

注意: 异步任务(如 fetch())必须在处理程序内部执行。如果您尝试在全局作用域内调用 fetch(),您的函数将返回错误。

语法

fetch(resource, options); // options 可选

fetch() 函数返回一个 Promise 对象,该对象最终会解析为一个 Response 对象。

参数

  • resource: Request | string | URL

    要获取的资源,可以是 Request 对象、字符串或 URL 对象。

  • options (可选): object

    一个对象,用于定义请求的内容和行为。可选属性包括:

    • method: 请求方法,例如 GETPOSTPUTDELETE 等。
    • headers: 请求头,一个包含请求头键值对的对象。
    • body: 请求体,可以是字符串、FormDataBlobArrayBuffer 等。
    • mode: 请求模式,例如 corsno-corssame-origin 等。
    • credentials: 凭证模式,例如 includesame-originomit 等。
    • cache: 缓存模式,例如 defaultno-cachereloadforce-cacheonly-if-cached 等。
    • redirect: 重定向模式,例如 followerrormanual 等。
    • referrer: 请求的引用者,可以是字符串或 URL 对象。
    • referrerPolicy: 请求的引用者策略,例如 no-referrerno-referrer-when-downgradeoriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-originunsafe-url 等。
    • integrity: 请求的完整性元数据,用于验证响应的完整性。
    • keepalive: 一个布尔值,指示是否保持连接。
    • signal: 一个 AbortSignal 对象,用于中止请求。
    • ignoreHttpsCert: 一个布尔值,指示是否忽略 HTTPS 证书验证错误,默认为 false
    • cdnCache: 一个对象,用于配置 CDN 缓存行为,可选属性包括:
      • ignoreCache: 布尔值,指示是否忽略 CDN 缓存,默认为 false
      • maxAge: 数字,以秒为单位设置缓存对象的有效期。
      • sMaxAge: 数字,以秒为单位设置共享缓存对象的有效期,仅对 public 缓存生效。

示例代码

以下代码段展示了如何使用 fetch() 方法发出 POST 请求,并设置忽略 HTTPS 证书错误和 CDN 缓存行为:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const init = {
    method: 'POST',
    headers: {
      'content-type': 'application/json;charset=UTF-8',
      'custom-header1': 'value1',
      'custom-header2': 'value2'
    },
    body: JSON.stringify({
      key1: 'value3',
      key2: 'value4'
    }),
    // 忽略 HTTPS 证书验证错误
    ignoreHttpsCert: true,
    // 配置 CDN 缓存行为
    cdnCache: {
        ignoreCache: false,
        maxAge: 3600,
        sMaxAge: 1800
    }
  }
  // 发起请求
  const response = await fetch('http://example.com', init)
  // 将请求返回给客户端
  return response
}
本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!