全部指南
严重程度:高危重定向链

为什么你的网站需要一个 HTTP→HTTPS 重定向

即便已经启用了 HTTPS,你的网站仍需要主动把 HTTP 请求重定向到 HTTPS。否则,访问到 HTTP 版本的用户会停留在一个未加密、可被拦截的连接上。

这是什么

当有人输入 yourdomain.com 而不带 https:// 时,浏览器会先尝试 HTTP。如果你的服务器在 80 端口返回的是内容而不是重定向,那次页面加载就是未加密的。

解决办法是设置一个永久(301)重定向,把每个 HTTP URL 都指向同一域名下对应的 HTTPS 地址。

为什么重要

未加密的流量可能被网络路径上的任何人读取或修改——公共 Wi-Fi、被攻陷的路由器、ISP。这包括表单数据和没有 Secure 标志的 cookie。

指向错误域名的重定向,或经过多跳的重定向链,会增加延迟,其本身也可能是配置错误或被劫持的迹象。

如何修复

在 nginx 中重定向

在 80 端口用一次 301 重定向到 HTTPS 来响应。

server {
  listen 80;
  server_name yourdomain.com;
  return 301 https://$host$request_uri;
}
与 HSTS 搭配使用

重定向处理第一跳;HSTS 则告诉浏览器在之后的访问中完全跳过 HTTP。两者要一起用。

保持重定向链简短

从 HTTP 一跳直达规范的 HTTPS URL,而不要在 www/非 www 以及末尾斜杠的各种变体之间来回跳转。

常见问题

有 SSL 证书还不够吗?

不够。证书让 HTTPS 得以启用,但没有重定向,用户仍可能加载 HTTP 版本。两者都需要。

用 301 还是 302 重定向?

用 301(永久)。它可以被缓存,并向浏览器和搜索引擎表明 HTTPS 才是规范版本。

你的应用受影响了吗?

AppSafe 一次免费扫描,就能检查这个问题以及数十项其他问题。

免费扫描我的应用