HTTPS 可能即将胜利,但 HTTP 的需求依然客观存在,在 2023 年使用 HTTP ,分享一些经验和问题。
迫于 Google Chrome (Edge)极高的市场占有率,交付标准以 Chrome 为准。
.app、.dev 等域名无法使用 HTTP,强制 HTTPS。
这是个无解的问题,你必须避开这些域名。 Chrome 会针对这些域名,直接 307 到 HTTPS。
下图就是例子,而这与 HSTS 有关。
HSTS
简而言之,只要域名在 HSTS 列表中,就会由浏览器直接 HTTP -> HTTPS,这是硬编码在浏览器中的。这其中又会有两种情况,像 .app、.dev 这种是整个顶级域名必须 HTTPS, 其他历史悠久的顶级域名 .com、.cn、.org 这种,则是通过响应头的方式,才会被收录到 HSTS 中, 并且一旦被收录,只有在设置的不短的有效时间过期后,才能重新 HTTP 访问。
你可以在这里检查域名的 HSTS 情况:
Chrome "307 Internal Redirect"
"307 Temporary Redirect" 是正常的307。
“307 Internal Redirect” 是 Chrome 内部的行为,一个假请求。
这时你需要关注响应头 Non-Authoritative-Reason。
“Non-Authoritative-Reason: HSTS” 代表 域名在 HSTS列表中,也就是别做 HTTP 访问的美梦。
使用 cloudflare 时, 部分地区出现了 “307 Internal Redirect” “Non-Authoritative-Reason: DNS” 。
代表了什么? 我弄不清楚原因,总之我测试的结果, 一些 DNS 在 Chrome 中会导致 "307 Internal Redirect" “Non-Authoritative-Reason: DNS”。
火狐中没有强制 HTTPS 的现象。
Chrome 中现象是访问出现本地磁盘缓存的 "307 Internal Redirect" 重定向到 HTTPS, 即使 HTTPS 上没有任何东西。但挂 VPN 访问则又可直接 HTTP 访问,可是域名并不在 HSTS 中,Chrome 为什么要这么做 ?
想解决只能不使用 cloudflare 了吧。
花了很多时间,找了很多资料, 为什么会 "307 Internal Redirect" “Non-Authoritative-Reason: DNS” 想的我是睡不着啊....
避开无处不在的升级
浏览器地址栏 和 一些软件的跳转中,HTTP 自动升级到 HTTPS 无处不在。
很要必须把 HTTPS 重定向到 HTTP,避免一些潜在问题,同时一定要避开 HSTS 和 Google DNS HTTPS Records。
参考:
https://docs.google.com/document/d/1k461sRbddjDGj7Q8f-ZKHZvmB-ENUWSdX_3Fpp2dmXQ/edit
https://stackoverflow.com/questions/50258202/how-does-google-force-https-on-their-app-tld
https://community.cloudflare.com/t/subdomain-with-ssl-off-redirects-too-many-times/436036
https://stackoverflow.com/questions/27945501/307-redirect-when-loading-analytics-js-in-chrome
https://www.cnblogs.com/Don/p/12192420.html
本文由 考拉 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Nov 17,2023