情况:站点,支持 HTTP 和 HTTPS。已启用 HSTS。由 Apache 2.2 提供支持。
后来,网站所有者决定只在某些页面(注册、订单等)上使用 HTTPS。但是,.htaccess 重定向失败,因为许多网站访问者的浏览器已经收到 HSTS 标头,不会显示 HTTP(导致重定向循环或到处使用 HTTPS)。
是否可以通过编程禁用 HSTS 重定向?唯一可行的方法是清除与网站相关的所有浏览器保存的数据,但远非完美。
尝试发送如下标头
Strict-Transport-Security: max-age=1;
并在设定的间隔(1 秒)过去后强制重定向到 HTTP,但看起来并非所有浏览器都能被欺骗(重定向循环仍然会发生)。
唯一的解决方案是要求用户手动删除提到的站点数据吗?
答案1
根据https://datatracker.ietf.org/doc/html/draft-ietf-websec-strict-transport-sec-11#section-6.1.1
“注意:最大年龄值为零(即“max-age=0”)表示 UA 停止将该主机视为已知 HSTS 主机。”
所以设置Strict-Transport-Security: max-age=0;
答案2
不,这是不可能的,甚至不应该是可能的,这又是 HSTS 的工作方式。为什么所有者要禁用对普通页面的 https 支持?您应该向所有者解释,https 在任何地方使用时效果最好。