如何对高德地图 JS API 做代理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SZhan
V2EX    前端开发

如何对高德地图 JS API 做代理?

  •  
  •   SZhan 2024-03-08 11:16:02 +08:00 1770 次点击
    这是一个创建于 657 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目前端引入高德地图 API 进行 WEB 端地图开发的,由于正式环境服务器安全性要求,不通外网,只给了另一台 DMZ 主机能够访问外网,所以前端项目内需要访问代理后的高德地图 API 。目前已经对所有的高德 API 做了 Nginx 反向代理,前端代码里引用到的 API 我也都替换了,但是上线正式环境服务器,还是不通,在控制台里看到高德地图会自调用一个回调接口,名为 callback ,具体地址贴在下面了。问了前端,没有了解的,只管引入然后开发,想问下各位这个自调用的回调地址怎么实现替换,换成代理地址?
    12 条回复    2024-03-08 14:57:35 +08:00
    rain0002009
        1
    rain0002009  
       2024-03-08 13:21:49 +08:00
    我很好奇 前端请求不是在浏览器发起的 关服务器有没有外网有什么关系
    IvanLi127
        2
    IvanLi127  
       2024-03-08 13:35:48 +08:00
    服务器不通外网和前端有啥关系,客户机子也不通外网吗?
    codespots
        3
    codespots  
       2024-03-08 13:38:34 +08:00
    就一个 JSONP 接口而已,前端不懂?
    CHTuring
        4
    CHTuring  
       2024-03-08 13:43:18 +08:00
    前端调用 JS SDK 和服务器有啥关系...
    dandeli0n
        5
    dandeli0n  
       2024-03-08 14:22:19 +08:00   1
    让前端写个全局的 fetch 和 xhr 拦截替换,像这样

    ```Javascript
    const original_fetch = window.fetch
    window.fetch = (request, options) => {
    if (typeof request === "string") {
    request = "https://bing.com"
    }else if (request instanceof Request) {
    request.url = "https://bing.com"
    }
    return original_fetch(request, options)
    }

    const original_xhr_open = XMLHttpRequest.prototype.open
    XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
    url = "https://bing.com"
    return original_xhr_open.apply(this, arguments)
    }

    fetch("https://google.com").finally()

    const xhr = new XMLHttpRequest()
    xhr.open("GET", "https://google.com")
    xhr.send()
    ```
    dandeli0n
        6
    dandeli0n  
       2024-03-08 14:25:53 +08:00
    #5 xhr 那里写错了

    return original_xhr_open.apply(this, [method, url, async, user, password])
    SZhan
        7
    SZhan  
    OP
       2024-03-08 14:40:40 +08:00
    @rain0002009 是这样的,整个系统被限制在了政务网内访问,自然客户使用的机器也是不通外网的,所以我的想法是把这个接口也做拦截,然后替换成我在服务器上做的代理地址
    SZhan
        8
    SZhan  
    OP
       2024-03-08 14:41:38 +08:00
    @caiqichang #5 明白了,我大概看了下,这个其实就是全局拦截这个请求接口,然后替换成目标地址去访问对吧?
    SZhan
        9
    SZhan  
    OP
       2024-03-08 14:42:57 +08:00
    @IvanLi127 对的,客户端也是在一个内网环境里的,不能访问这些公网地址,所以这种自调用地址就比较头疼
    SZhan
        10
    SZhan  
    OP
       2024-03-08 14:45:10 +08:00
    @codespots 可能也是不想思考怎么解决把,因为给的测试环境机器是公网的,开发完放上去能展示就算完成了,不管了。
    SZhan
        11
    SZhan  
    OP
       2024-03-08 14:48:58 +08:00
    @CHTuring 因为浏览器也是在政务内网里的诶,客户的工作环境是一台公网、一台内网,只能用内网的机器访问系统,所以这就导致了只能借助这个内网环境下,唯一可访问公网的服务器做代理。我能想到的办法只有这样
    NerbraskaGuy
        12
    NerbraskaGuy  
       2024-03-08 14:57:35 +08:00
    刚好搜了下,这个应该算解决方法,相当于手动拦截: https://blog.csdn.net/weixin_58631631/article/details/133773423
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1010 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:29 PVG 02:29 LAX 10:29 JFK 13:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86