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

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

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

    return original_xhr_open.apply(this, [method, url, async, user, password])
    SZhan
        7
    SZhan  
    OP
       260 天前
    @rain0002009 是这样的,整个系统被限制在了政务网内访问,自然客户使用的机器也是不通外网的,所以我的想法是把这个接口也做拦截,然后替换成我在服务器上做的代理地址
    SZhan
        8
    SZhan  
    OP
       260 天前
    @caiqichang #5 明白了,我大概看了下,这个其实就是全局拦截这个请求接口,然后替换成目标地址去访问对吧?
    SZhan
        9
    SZhan  
    OP
       260 天前
    @IvanLi127 对的,客户端也是在一个内网环境里的,不能访问这些公网地址,所以这种自调用地址就比较头疼
    SZhan
        10
    SZhan  
    OP
       260 天前
    @codespots 可能也是不想思考怎么解决把,因为给的测试环境机器是公网的,开发完放上去能展示就算完成了,不管了。
    SZhan
        11
    SZhan  
    OP
       260 天前
    @CHTuring 因为浏览器也是在政务内网里的诶,客户的工作环境是一台公网、一台内网,只能用内网的机器访问系统,所以这就导致了只能借助这个内网环境下,唯一可访问公网的服务器做代理。我能想到的办法只有这样
    NerbraskaGuy
        12
    NerbraskaGuy  
       260 天前
    刚好搜了下,这个应该算解决方法,相当于手动拦截: https://blog.csdn.net/weixin_58631631/article/details/133773423
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2715 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:29 · PVG 20:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.