前端怎么判断当前连接的网络是内网还是外网?

2019-03-08 16:30:29 +08:00
 ASpiral

外包项目,前后端分离,前端纯 H5,打包后放到指定的 app 里,类似微信小程序;
后台部署在对方内部服务器,前端通过内网地址向后台发起请求,手机需要连接内网 wifi 才能使用该小程序。

对方要求手机连外网时也能使用,于是找对方申请外网访问权限,通过端口映射访问内网;
前端改成 公网 ip+端口 请求后台,结果手机连外网可以使用,内网就用不了了…
项目经理在群里 @我(前端)让我解决问题:判断当前手机连的网络是内网还是外网,内网用内网地址,外网用外网地址。
我一下子就懵了,这前端能做得到吗?

一开始想到的是通过 ajax 请求超时来判断,但这样子从进入首页到请求超时这段时间页面就没数据显示了;
目前的解决方法是进入首页后先同时向内外网地址发起请求,哪个先响应后续的所有请求就用该地址;
总感觉这样不妥,后续业务扩展这问题可能还会暴露出来;
我觉得这问题不该由前端来解决,但跟项目经理解释不清,所以想请教下,纯前端要怎么判断当前网络是内网还是外网?

6308 次点击
所在节点    问与答
26 条回复
myzyq
2019-03-08 23:27:22 +08:00
感觉域名解析靠谱!
Acoffice
2019-03-08 23:41:33 +08:00
@ASpiral 你内外网访问地址不一致?比如外网访问是 112.x.x.x:8080 内网直接访问 192.168.1.2 ?
-----
正常来说,如果内外端口一致,内网有上网权限,是不会访问不了的.
域名同理,如果内网有 DNS 服务器,且指定了域名对应的内网地址,那内网无上网权限也没有影响.
autoxbc
2019-03-09 00:08:52 +08:00
这个问题的术语叫 NAT 回流,对方好沟通的话让网管处理
greatbody
2019-03-09 09:58:26 +08:00
@leo108 赞同。
aunox
2019-03-09 11:01:47 +08:00
前提:在内网时,不能访问外网。
在第三方不给你提供帮助的情况下,#2 的解决方案里面第二种是比较靠谱的。只要判断内网图片能不能访问就行了,内网 IP 路由没几跳,这个错误响应速度是很快的,对于使用者来说应该是无感知的,公网下载图片就不要测试了。
sampeng
2019-03-09 18:53:04 +08:00
这明显要甩锅给甲方的网络环境…关你们屁事昂。合同有写么

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

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

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

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

© 2021 V2EX