Cloudflare Workers 反向代理+跨域

2022-06-25 21:52:24 +08:00
 estk

有时前端在调用一些第三方 API 时会遇到跨域问题,通过反代并在 headers 里配置即可跨域

async function handleRequest(request) {
  const urlObj = new URL(request.url)
  let url = urlObj.href.replace(urlObj.origin+'/', '').trim()
  if (0!==url.indexOf('https://') && 0===url.indexOf('https:')) {
    url = url.replace('https:/', 'https://')
  } else if (0!==url.indexOf('http://') && 0===url.indexOf('http:')) {
    url = url.replace('http:/', 'http://')
  }
  const response = await fetch(url, {
    headers: request.headers,
    body: request.body,
    method: request.method
  })
  let respHeaders = {}
  response.headers.forEach((value, key)=>respHeaders[key] = value)
  respHeaders['Access-Control-Allow-Origin'] = '*'
  return new Response( await response.blob() , {
    headers: respHeaders,
    status: response.status
  });
}
addEventListener('fetch', event => {
  return event.respondWith(handleRequest(event.request))
})

使用方法:

xxx.workers.dev/https://guge.com

可用于反代网页、json 甚至 image 等文件

2399 次点击
所在节点    Serverless
2 条回复
initd
2022-06-26 13:06:16 +08:00
有问题, 没有传递 request 的其他属性, 比如 header
estk
2022-06-26 13:14:57 +08:00
@initd
传了:
headers: request.headers

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862194

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX