首页 新闻 会员 周边 捐助

烧脑!!!关于浏览器跨网段请求一个不存在的服务时如何避免超时提示?

0
悬赏园豆:100 [已解决问题] 解决于 2023-10-24 23:01

简述一下我的现象吧,
浏览器访问同网段服务器:
服务器关机或者停止tomcat服务,触发onerror事件,且浏览器能终止这个请求(体现为没有后续的“超时”错误弹框)。
浏览器访问跨网段服务器:
1、停止tomcat-》同上。
2、服务器关机:能触发ontimeout方法,但等该请求到达浏览器超时上限后,会弹出一个“超时”弹框。

诉求:有什么方法,我可以获得该服务器的状态(是否能访问/是否能建立连接/...都可以),但是避免弹出超时弹框。

这个超时弹框好像是浏览器的一个安全机制。同网段内即使服务停了或者关机了,都能通过路由器获取该IP状态,能建立连接但被拒绝。但是跨网段,浏览器发送一个请求到未知地点,没有响应触发超时,会强制弹一个超时弹框。

或者用其他什么协议能实现这个功能?

我现在就是有一个界面需要显示在终端面板上,但是那个终端浏览器版本很老,浏览器超时就会弹出“超时”弹框

问题补充:

这个终端是个打印设备,有个内置的浏览器(能与机器交互)。我需要将我的html界面在其浏览器上运行,其中需要向服务端请求一张图片。当然如果在我们电脑上随便一个浏览器内跑这个html都是没问题的,即使跨网段请求的结果是超时无响应,也只不过是在console中输出一段异常消息。但是在这个终端设备中就会触发浏览器的超时机制,会强制弹出一个超时弹框。这非常影响操作,但是根据厂家解释,这属于较底层的逻辑,应该是改不了的,我想通过其他方式如果能获取的目标服务器的状态,如果提前能知道它不可建立连接(无法响应),那我就可以选择取消向它发起这次请求。从而避免机器“超时”弹框的出现。

至于如何理解这种现象,我认为就好似使用终端ping 一个同网段的IP,及时这个IP不存在,也会提示目标拒绝访问。但如果尝试ping一个跨网段的IP,如果它不存在,则会提示:连接超时。前者属于建立了连接但被拒绝了。后者属于发起的请求未收到响应。

玩屎的猪的主页 玩屎的猪 | 初学一级 | 园豆:59
提问于:2023-07-19 19:00
< >
分享
最佳答案
1

使用HTTP HEAD请求就可以了
HTTP HEAD请求类似于GET请求,但服务器只会返回头部信息而不返回实际的内容

现在很多框架或者第三方中间件框架在进行链接时,都会用这个协议进行预调用来判断服务是否可用

收获园豆:100
NotoChen | 菜鸟二级 |园豆:401 | 2023-07-27 16:17

谢谢解答,现在才刚看到您的回复。我之前经过测试发现使用GET请求时,能结束这次请求而且没有再报超时错误,但也有限制,比如当上次GET请求还未结束时发起新的GET请求,就又会提示超时弹框,所以我通过GET请求和一个Loading标识来避免这个问题。至于他这个超时,就是因为无法建立连接而触发了机器的安全弹框机制。厂家也没办法短时间解决。您说的Head请求我尝试了下,与使用Get请求的差异不大。再次感谢您的解答

玩屎的猪 | 园豆:59 (初学一级) | 2023-08-04 15:53
其他回答(3)
0

为什么要 知道服务器关机或者停止呢?

需要格局 | 园豆:2145 (老鸟四级) | 2023-07-19 19:43

有一个灾备的场景,如果向第一个服务器请求图片超时或失败时,切换至向第二个服务器请求。

支持(0) 反对(0) 玩屎的猪 | 园豆:59 (初学一级) | 2023-07-19 22:02

@玩屎的猪: 你可以使用5个tomcat,然后使用nginx来反向代理,做负载均衡。nginx有容灾能力,可能解决你的问题。 你一开始就把问题 搞 复杂了。才想出社么奇怪的办法

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2023-07-20 09:01

@需要格局: 可能我没有表述清楚我的问题。现在是机器访问跨网段的服务时,如果服务不通畅会报超时错误。即使使用nginx反向代理,那代理的IP仍然有可能不通。事实上,这个问题与灾备没有关系,只是在测试灾备功能中发现了这个现象。而我向通过客户端来解决或避免这个问题。

支持(0) 反对(0) 玩屎的猪 | 园豆:59 (初学一级) | 2023-07-20 11:06
0

那个终端浏览器版本很老

疑问:
1、开发的Web管理系统,只给这个浏览器使用?
2、你的开发框架是什么?
有些开发框架不支持老旧的浏览器
3、前端开发框架 应该可以 阻止这些弹窗吧?——异步请求

或许可以回复上级、客户,需求不合理,设计不合理。
或者,付费请外面前端大神来指点一二。

或许一会儿这里就有了。

快乐的欧阳天美1114 | 园豆:4010 (老鸟四级) | 2023-07-19 20:16

这个终端是个打印设备,有个内置的浏览器(能与机器交互)。我需要将我的html界面在其浏览器上运行,其中需要向服务端请求一张图片。当然如果在我们电脑上随便一个浏览器内跑这个html都是没问题的,即使跨网段请求的结果是超时无响应,也只不过是在console中输出一段异常消息。但是在这个终端设备中就会触发浏览器的超时机制,会强制弹出一个超时弹框。这非常影响操作,但是根据厂家解释,这属于较底层的逻辑,应该是改不了的,我想通过其他方式如果能获取的目标服务器的状态,如果提前能知道它不可建立连接(无法响应),那我就可以选择取消向它发起这次请求。从而避免机器“超时”弹框的出现。

至于如何理解这种现象,我认为就好似使用终端ping 一个同网段的IP,及时这个IP不存在,也会提示目标拒绝访问。但如果尝试ping一个跨网段的IP,如果它不存在,则会提示:连接超时。前者属于建立了连接但被拒绝了。后者属于发起的请求未收到响应。

支持(0) 反对(0) 玩屎的猪 | 园豆:59 (初学一级) | 2023-07-19 22:16

@玩屎的猪:
借助代理,在本网的的服务器提供额外的接口,用于检查跨网段服务器的状态;
先请求本网段服务器的这个接口获取跨网段服务器的状态,然后再处理。

支持(0) 反对(0) 快乐的欧阳天美1114 | 园豆:4010 (老鸟四级) | 2023-07-20 06:55

@快乐的凡人721: 感谢想法,理论上是可行的。但实际场景中终端设备分布在各个网段,服务器的成本太高。所以没有选择这种方法。我现在的思路是有没有一种非Http的协议,能避免这种现象。比如websoket?但是有待验证。

支持(0) 反对(0) 玩屎的猪 | 园豆:59 (初学一级) | 2023-07-20 11:00

@玩屎的猪:
继续设计,继续试验,总会搞定。

支持(1) 反对(0) 快乐的欧阳天美1114 | 园豆:4010 (老鸟四级) | 2023-07-20 13:05
0

先说结论,没有找到解决办法。因为是打印机本身的机制。但是想办法绕过去了

玩屎的猪 | 园豆:59 (初学一级) | 2023-10-24 23:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册