GUIDE 05
HTTP 到 HTTPS 的正确迁移顺序
先让 HTTPS 本身完整可用,再把 HTTP 流量迁过去,最后才考虑 HSTS。顺序错误会把证书或代理问题放大成全站不可访问。
第一步:让 HTTPS 独立可用
在启用强制跳转前,先直接访问 HTTPS 版本,验证证书链、域名覆盖、有效期、TLS 协议、页面功能和静态资源。证书应覆盖用户可能访问并发生跳转的每个旧主机名,因为浏览器必须先成功建立旧主机的 TLS 连接,才能读取重定向。
检查页面中的脚本、样式、图片、字体、API 和 WebSocket 是否仍引用 HTTP。被浏览器阻止的混合内容可能不会体现在服务器端 HEAD 检测中,需要结合浏览器控制台和网络面板。
第二步:配置一次性跳转
HTTP 入口应直接指向最终 HTTPS 规范地址。如果同时统一 www、路径或尾斜杠,应尽量合并成一次跳转。先用临时状态小范围验证规则,确认无误后再切换为 301 或 308,避免错误永久跳转进入浏览器和 CDN 缓存。
http://example.com/old
→ https://www.example.com/new
→ 200 OK
第三步:正确处理反向代理
CDN 或负载均衡终止 TLS 后,源站连接可能是 HTTP。应用必须信任来自指定代理的 X-Forwarded-Proto 或标准 Forwarded 头,同时不能无条件信任公网客户端伪造的代理头。错误配置会导致 HTTPS 循环、错误绝对链接或 Secure Cookie 丢失。
第四步:更新站内信号
- 站内链接直接使用 HTTPS 最终地址。
- canonical、hreflang、Open Graph 和结构化数据使用 HTTPS。
- sitemap 只列出可索引的 HTTPS URL。
- 第三方回调、OAuth、支付通知和 webhook 更新到 HTTPS。
- Cookie 根据用途设置 Secure、HttpOnly 和合适的 SameSite。
最后才启用 HSTS
HSTS 告诉浏览器在未来直接使用 HTTPS,不再尝试 HTTP。它能降低降级攻击风险,但也会让客户端在证书或 HTTPS 配置故障时无法绕过。先用较短 max-age 观察,确认所有子域都支持 HTTPS 后再考虑 includeSubDomains;提交 preload 更是长期承诺。
不要过早 preload:一旦进入浏览器预加载列表,关闭 HTTPS 或迁回 HTTP 不能立即恢复。必须先审计所有子域、遗留设备和第三方接入。
验证矩阵
| 入口 | 预期 | 重点 |
|---|---|---|
| http://example.com | 一次到最终 HTTPS | 主机名与路径 |
| https://example.com | 证书成功后规范化 | SAN 与 SNI |
| http://www.example.com/path | 保留路径和查询 | Location 完整性 |
| HTTPS 最终页 | 200,无混合内容 | 资源与 API |
回滚思路
保留证书和 HTTPS 服务,即使需要暂时撤销强制跳转,也不要让已收到 HSTS 的用户失去 HTTPS。回滚应优先恢复上一版应用或代理配置,而不是把流量降级回明文 HTTP。