一. 背景
我们的网站引入了一些外部链接,这些外部链接使用的协议有些是 “http”, 有些是 “https”。
上线的时候有时候点击外部的链接有的会出现 404 。如下图
二. 问题分析
- 出现 “404” 的错误的原因
我们发现系统中实际绑定的链接是 http:// jhsjk.people.cn/article/402…,如果直接访问此URL是可以正常访问的,但是点击之后却跳转到了 https:// jhsjk.people.cn/article/402… ,就是点击跳转之后 URL 被重定向到了 “HTTPS” 协议的地址,但是该网站不支持 “HTTPS”, 所以出现了 “404” 的错误。
- 网页被重定向的原因
上面提到 Chrome 浏览器会处于安全性的考虑,可能把 HTTP 的连接重定向到 HTTPS,这就是我们网站被重定向的原因。具体哪些情况会让我们重定向出错,继续往下分析。
- 访问不同情况的 HTTP 站点的时候的表现
- 网站的 HTTPS 证书有问题,浏览器不操作不自动到 https,正常访问。
2)网站本身不支持 HTTPS, 但是全站做了降级处理。无感知,正常访问。
3)HTTPS 证书没有问题,本身站点不支持 HTTPS ,浏览器自动跳转到 HTTPS 站点,导致访问出错。对于此问题如果,整个站点都没有做处理,我们将无法解决该问题,但分析发现我们要访问的此类站点是网站首页做了 302 重定向,降级处理。也就是当我们访问 https:// jhsjk.people.cn/article/402… 的时候,该站点自动重定向到了 http: // jhsjk.people.cn/article/402… ,能够正常访问。
所以我们需要处理的就是第 3 种情况。
三. 处理方法
- 对于上面的问题,我们可以先访问网站的首页,让站点触发降级,浏览器会缓存改站点降级情况,让后然后跳转到目标页面,就可以自动跳转了。伪代码如下
用此方法访问的副作用在于用户会明显感知到页面刷新的,出现页面闪屏。
- 建立黑名单,只把需要做此处理的网页做如上处理。