是否有ICANN等机构的公共HTTP服务器可用于测试互联网连通性?
回答
有符合要求的权威公共服务可用,目前行业内普遍采用这类高可靠公共服务做连通性校验,稳定性有足够保障。
可选的权威服务类型
- ICANN及全球根域名运营机构提供的公共连通性检测端点,普遍支持跨域请求,可用性接近100%,几乎不存在全球范围宕机的可能
- 全球头部公共DNS、NTP服务运营方提供的健康检测接口,节点覆盖广,响应速度快,也适合做前端连通性校验
核心判断逻辑
当你的自有服务端请求失败时,按以下逻辑判断故障原因:
- 同时向2~3个不同运营主体的权威公共服务发起轻量请求
- 若所有公共服务请求都失败,判定为客户端互联网连接异常
- 若公共服务请求正常返回,仅自有服务请求失败,判定为自有服务端宕机
代码实现示例
// 连通性检测工具函数 async function checkInternetAvailable() { // 填入2~3个你选定的权威公共检测服务地址,建议优先选支持HEAD请求的端点 const checkList = [ '你的第一个权威检测服务地址', '你的第二个权威检测服务地址' ] const requestList = checkList.map(url => fetch(url, { method: 'HEAD', // 用HEAD请求减少传输开销 mode: 'cors', cache: 'no-store', timeout: 3000 }) ) try { // 只要任意一个请求成功即说明网络正常 await Promise.any(requestList) return true } catch(err) { // 所有请求都失败说明客户端网络异常 return false } } // 业务请求中的调用示例 async function fetchBusinessData() { try { const response = await fetch('你的自有服务端接口地址') return await response.json() } catch(err) { const netWorkOk = await checkInternetAvailable() if (netWorkOk) { // 触发服务端故障的提示逻辑 console.log('服务端暂时无法访问,请稍后重试') } else { // 触发客户端网络故障的提示逻辑 console.log('网络连接异常,请检查你的网络设置') } } }
优化建议
- 尽量用HEAD请求替代GET请求,减少不必要的带宽消耗,也能降低对公共服务的压力
- 不要只依赖单个公共检测服务,避免单个服务临时波动造成误判
- 不要高频轮询公共检测服务,仅在自有服务请求失败时触发一次检测即可
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

