HTTPS? 坚守 HTTP 协议面临的问题与解决方案

in with 0 comment

HTTPS 可能即将胜利,但 HTTP 的需求依然客观存在,在 2023 年使用 HTTP ,分享一些经验和问题。

迫于 Google Chrome (Edge)极高的市场占有率,交付标准以 Chrome 为准。

.app、.dev 等域名无法使用 HTTP,强制 HTTPS。

这是个无解的问题,你必须避开这些域名。 Chrome 会针对这些域名,直接 307 到 HTTPS。
下图就是例子,而这与 HSTS 有关。

image.png

HSTS

简而言之,只要域名在 HSTS 列表中,就会由浏览器直接 HTTP -> HTTPS,这是硬编码在浏览器中的。这其中又会有两种情况,像 .app、.dev 这种是整个顶级域名必须 HTTPS, 其他历史悠久的顶级域名 .com、.cn、.org 这种,则是通过响应头的方式,才会被收录到 HSTS 中, 并且一旦被收录,只有在设置的不短的有效时间过期后,才能重新 HTTP 访问。

你可以在这里检查域名的 HSTS 情况:

https://hstspreload.org/

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” 。

image.png

代表了什么? 我弄不清楚原因,总之我测试的结果, 一些 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://hstspreload.org/#tld

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://serverfault.com/questions/1067229/list-of-top-level-domains-tlds-that-require-https-connections-like-dev

https://stackoverflow.com/questions/70705778/chrome-redirects-and-makes-2-requests-of-the-same-page-307-internal-redirect

https://stackoverflow.com/questions/27945501/307-redirect-when-loading-analytics-js-in-chrome

https://www.cnblogs.com/Don/p/12192420.html