V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
estk
V2EX  ›  Serverless

Cloudflare Workers 反向代理+跨域

  •  
  •   estk · 157 天前 · 690 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有时前端在调用一些第三方 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 等文件

    initd
        1
    initd  
       156 天前
    有问题, 没有传递 request 的其他属性, 比如 header
    estk
        2
    estk  
    OP
       156 天前 via Android
    @initd
    传了:
    headers: request.headers
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1199 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 580ms · UTC 20:43 · PVG 04:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.