点击外部的 HTTP 链接会自动跳转到 HTTPS 链接导致访问出错问题排查

397 阅读2分钟

一. 背景

我们的网站引入了一些外部链接,这些外部链接使用的协议有些是 “http”, 有些是 “https”。

上线的时候有时候点击外部的链接有的会出现 404 。如下图

01_01.png

二. 问题分析

  1. 出现 “404” 的错误的原因

我们发现系统中实际绑定的链接是 http:// jhsjk.people.cn/article/402…,如果直接访问此URL是可以正常访问的,但是点击之后却跳转到了 https:// jhsjk.people.cn/article/402… ,就是点击跳转之后 URL 被重定向到了 “HTTPS” 协议的地址,但是该网站不支持 “HTTPS”, 所以出现了 “404” 的错误。

  1. 网页被重定向的原因

04.png

上面提到 Chrome 浏览器会处于安全性的考虑,可能把 HTTP 的连接重定向到 HTTPS,这就是我们网站被重定向的原因。具体哪些情况会让我们重定向出错,继续往下分析。

  1. 访问不同情况的 HTTP 站点的时候的表现
  1. 网站的 HTTPS 证书有问题,浏览器不操作不自动到 https,正常访问。

2)网站本身不支持 HTTPS, 但是全站做了降级处理。无感知,正常访问。

3)HTTPS 证书没有问题,本身站点不支持 HTTPS ,浏览器自动跳转到 HTTPS 站点,导致访问出错。对于此问题如果,整个站点都没有做处理,我们将无法解决该问题,但分析发现我们要访问的此类站点是网站首页做了 302 重定向,降级处理。也就是当我们访问 https:// jhsjk.people.cn/article/402… 的时候,该站点自动重定向到了 http: // jhsjk.people.cn/article/402… ,能够正常访问。

所以我们需要处理的就是第 3 种情况。

三. 处理方法

  1. 对于上面的问题,我们可以先访问网站的首页,让站点触发降级,浏览器会缓存改站点降级情况,让后然后跳转到目标页面,就可以自动跳转了。伪代码如下

03.png 用此方法访问的副作用在于用户会明显感知到页面刷新的,出现页面闪屏。

  1. 建立黑名单,只把需要做此处理的网页做如上处理。