tuqin
3 天以前 3b8ba54ea299a9febdf3a989a72b4eba311be796
分支
用户 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 16:51 +0800
提交者 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 16:51 +0800
提交3b8ba54ea299a9febdf3a989a72b4eba311be796
目录 5515de87989a81971415b337e68d4eda6ffb6ca9 目录 | zip | gz
上一版本 23b513b644720666c5bda5073b34567cbadbbe4a 查看 | 对比
fix(map): SDK 改走同域反向代理,绕开客户端 IPv6 不通

诊断页实测拿到决定性证据:script 的 error 事件在同一秒触发(不是超时),
说明请求立即失败。进一步排查:

- 百度的 DNS 同时返回 A 和 AAAA,浏览器优先连 IPv6
api.map.baidu.com -> A: 36.144.42.203 / 36.144.42.82
AAAA: 2409:8c00:6c21:103c:0:ff:b058:29bf
- 服务器实测:curl -4 得到 HTTP 200 / 0.94s;curl -6 直接失败
=> 该网络环境 IPv6 不通,浏览器扑到 IPv6 死路后立即报错

修复(服务器侧 + 前端):
1. nginx 新增 /bmap-api/ 反向代理(/data/nginx-docker/conf/bmap-proxy.conf,
由 9023 的 server 块 include),proxy_pass 固定 IPv4 36.144.42.203,
Host 头仍为 api.map.baidu.com,客户端只访问本机 9023。
实测经代理加载 SDK:HTTP 200 / 879431 字节 / 0.27s(公网 1.66s)。
2. 前端 loadBaiduMapSdk 改为按顺序尝试:
/bmap-api/getscript(同域代理) -> https://api.map.baidu.com/getscript(直连回退)
3. 诊断页 bmap-test.html 增加「经本站代理加载」区块,
同时验证代理通道和地图瓦片是否可用。

已知限制:SDK 里地图瓦片域名(apimaponline0-3.bdimg.com 等)是硬编码的,
window.B_HOST_TILE_ONLINE_URLS 会被 SDK 自身覆盖,无法通过配置改为代理地址。
若瓦片仍因 IPv6 加载不出,需再做瓦片代理或由客户侧放开 IPv6。
已修改2个文件
132 ■■■■■ 文件已修改
public/bmap-test.html 40 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/components/map/src/utils.ts 92 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史