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

2022-10-28 23:44:24 +08:00
 estk

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

import { serve } from "https://deno.land/std@0.155.0/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`)
})
6490 次点击
所在节点    Node.js
13 条回复
learningman
2022-10-29 02:57:42 +08:00
可别拿人家测试环境当云函数使了。。。
8520ccc
2022-10-29 03:28:44 +08:00
@learningman 不滥用,厂家是支持的……
amlee
2022-10-29 04:47:52 +08:00
@learningman 本身就是一个云函数环境呀,有额度的
icoming
2022-10-29 06:53:14 +08:00
比如说,反代百度可以正常打开首页,但点击搜索后,跳转时就把百度的域名给弄丢了。这个怎么搞?
c0t
2022-10-29 09:20:19 +08:00
deno 到底是禁止反代,还是禁止破墙的代理?
estk
2022-10-29 10:19:19 +08:00
@icoming #4
这个需要把 html 代码里的所有 src 再反代一下,需要处理源码
estk
2022-10-29 10:20:36 +08:00
@c0t #5
deno 哪个官方文档提到禁止反代?
icoming
2022-10-29 16:12:30 +08:00
@estk 谢谢,偶尔急用还是很不错
estk
2022-10-29 16:31:38 +08:00
@icoming #8
当你们公司后端给你测试接口不开跨域时
Lighfer
2022-10-29 21:40:40 +08:00
icoming
2022-10-29 22:09:14 +08:00
@Lighfer 谢谢,可用。这小玩意挺有意思
bojackhorseman
2022-10-30 00:18:13 +08:00
前端构建工具自带有 proxy 啊
c0t
2022-11-19 13:18:51 +08:00
@estk https://deno.com/deploy/docs/fair-use-policy 倒也不是说禁止,不建议当 proxy 用

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

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

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

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

© 2021 V2EX