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

Deno 反向代理解决前端跨域问题以及将 http 转为 https

  •  
  •   estk · 2022-10-28 23:44:24 +08:00 · 6439 次点击
    这是一个创建于 754 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端在调用别人 api 时经常遇到跨域或者 https 无法调用 http 的问题,通过反代即可解决。 deno.com 提供免费的 NodeJS 环境,在其官网后台新建应用,在 playground 粘贴代码:

    import { serve } from "https://deno.land/[email protected]/http/server.ts"
    serve(async (req: Request) => {
      const url = new URL(req.url)
      const targetUrl = url.href.replace(`${url.origin}/`, '')
      let urlObj: any
      try {
        urlObj = new URL(targetUrl)
      } catch (e) {
        console.error(e.message)
      }
      if (['http:', 'https:'].indexOf(urlObj?.protocol) > -1) {
        let res = await fetch(targetUrl, {
          headers: req.headers,
          method: req.method,
          body: req.body,
        })
        let headers = {}
        res.headers.forEach((value, key) => {
          headers[key] = value
        })
        if ('*' !== headers['Access-Control-Allow-Origin']?.trim()
          && '*' !== headers['access-control-allow-origin']?.trim()) {
          headers['Access-Control-Allow-Origin'] = '*'
        }
        return new Response(res.body, { headers, status: res.status })
      }
      return new Response(
        `Usage: ${url.origin}/https://deno.com/deploy/docs/pricing-and-limits`)
    })
    
    13 条回复    2022-11-19 13:18:51 +08:00
    learningman
        1
    learningman  
       2022-10-29 02:57:42 +08:00
    可别拿人家测试环境当云函数使了。。。
    8520ccc
        2
    8520ccc  
       2022-10-29 03:28:44 +08:00 via iPhone
    @learningman 不滥用,厂家是支持的……
    amlee
        3
    amlee  
       2022-10-29 04:47:52 +08:00
    @learningman 本身就是一个云函数环境呀,有额度的
    icoming
        4
    icoming  
       2022-10-29 06:53:14 +08:00
    比如说,反代百度可以正常打开首页,但点击搜索后,跳转时就把百度的域名给弄丢了。这个怎么搞?
    c0t
        5
    c0t  
       2022-10-29 09:20:19 +08:00 via Android
    deno 到底是禁止反代,还是禁止破墙的代理?
    estk
        6
    estk  
    OP
       2022-10-29 10:19:19 +08:00 via Android
    @icoming #4
    这个需要把 html 代码里的所有 src 再反代一下,需要处理源码
    estk
        7
    estk  
    OP
       2022-10-29 10:20:36 +08:00 via Android
    @c0t #5
    deno 哪个官方文档提到禁止反代?
    icoming
        8
    icoming  
       2022-10-29 16:12:30 +08:00
    @estk 谢谢,偶尔急用还是很不错
    estk
        9
    estk  
    OP
       2022-10-29 16:31:38 +08:00 via Android
    @icoming #8
    当你们公司后端给你测试接口不开跨域时
    Lighfer
        10
    Lighfer  
       2022-10-29 21:40:40 +08:00   ❤️ 1
    icoming
        11
    icoming  
       2022-10-29 22:09:14 +08:00
    @Lighfer 谢谢,可用。这小玩意挺有意思
    bojackhorseman
        12
    bojackhorseman  
       2022-10-30 00:18:13 +08:00 via iPhone
    前端构建工具自带有 proxy 啊
    c0t
        13
    c0t  
       2022-11-19 13:18:51 +08:00 via Android   ❤️ 1
    @estk https://deno.com/deploy/docs/fair-use-policy 倒也不是说禁止,不建议当 proxy 用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3085 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:43 · PVG 20:43 · LAX 04:43 · JFK 07:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.