我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

近期公司项目使用的域名在北京地区出现无法访问的情况,用户最直观的感受就是打开页面时出现无法理解的提示:

打开网页域名解析错误_网站域名解析错误_登录网站显示域名解析错误

其实,net::ED 的提示太模糊了,不只是用户,就连我们这些开发者看到这个提示也未必能立刻做出反应。

技术会后我们得出的结论是DNS被劫持了,需要联系当地运营商解决,临时的解决办法是更换域名(一般公司都会有备用域名),然后给用户发新的套餐进行更换。

等待运营商解决问题只能是碰运气,重发套餐只是暂时的解决办法,还是考虑换个域名解决吧。

复发性

首先我们需要尝试复现一下这个场景,由于我不在北京,所以无法直接复现这个问题,但是我们可以思考一下这个问题的本质。

之前提到过,域名和 IP 地址之间存在映射关系,DNS 服务器与 Hosts 一样,起着解析这个映射的作用,也就是说,当解析出错时,就会出现上述问题。

那么我们该如何判断所谓的“解析错误”呢?

也很简单,由于域名和IP是有映射关系的,所以出错就意味着无法将域名解析到正确的IP上,我们可以利用Hosts来实现,具体操作可以参考文章《》。

接下来写一个demo来加载一个网页,我这里就用阿里云官网来写一个demo,效果如下:

然后通过“”查看百度官网IP地址,修改Hosts文件,将阿里云官网域名映射到百度IP地址:

14.215.177.38   www.aliyun.com

再次运行demo,可以看到页面还未加载完成:

网站域名解析错误_打开网页域名解析错误_登录网站显示域名解析错误

这似乎和我最初的情况不同。我们尝试将域名指向本地主机:

127.0.0.1   www.aliyun.com

情况再次发生:

复发后再进行针对性的解决。

解决方案

测试发现,上面两种情况会分别回调()和()接口,我们可以在这两个回调中切换域名,避免DNS劫持导致的错误页面:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        super.onReceivedSslError(view, handler, error);
        // 切换域名
    }
    
    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
        // 切换域名
    }

    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        // 切换域名
    }
});

需要注意的是,虽然页面提示了net::ED内容,但是不要试图抓取对应的描述内容进行处理,因为不同的错误可能会产生不同的描述,无法预测所有的情况,最好在回调中统一处理。

网络请求处理解决方案

大部分项目都是使用同一套域名,也就是说如果网页不能正常打开,那么普通的同域名网络请求也会失败。

网络请求下判断劫持好像有点麻烦,因为不像那样直接去对应的回调,而且各个网络请求框架的封装也不同。

当域名被劫持后进行网络请求,理论上响应是空的,但是如果指向的IP有相同的目录,则可能不为空。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/2646.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线