我有一个 Rails 应用程序config.force_ssl = true
,但现在我不想要 SSL 加密,但我的应用程序仍在重定向到 https。我读到这是 Apache 上的 HTTP 严格传输安全问题。我怎样才能禁用它?
5 回答
这不是 Apache 的问题,而是 Rails 发送 HSTS 标头的事实。
在 Chrome 中,您可以通过进入 清除 HSTS 状态about:net-internals
,如ImperialViolet: HSTS UI in Chrome 中所述。您可能还需要清除缓存,因为config.force_ssl = true
还使用 301(永久)重定向。
此外,根据这个答案,您还可以让您的应用程序发送一个 max-age=0 的 STS 标头。在您的控制器中:
response.headers["Strict-Transport-Security"] = 'max-age=0'
只是想指出@Bruno 的答案和@JoeVanDyk 的建议是正确的,并且可以在 Rails/Apache 的上下文之外应用。我正在使用 PHP 和 Nginx。在我的情况下,PHP 与它无关,但这里是使用 Nginx 的步骤:
//sorry here's the nginx.conf part first, can't figure out how to mix multi-line
//code with an ordered list
server {
#...
#change:
# add_header Strict-Transport-Security "max-age=315360000; includeSubdomains";
#to:
add_header Strict-Transport-Security "max-age=0;";
#...
}
清除您的“浏览器历史记录”。为了澄清@JoeVanDyk 的建议,我认为您需要清除“浏览历史记录”,因为清除缓存对我不起作用(在 Chrome/Firefox 上测试,如果您了解更多,请添加评论)。
nginx.conf 文件(见上面的代码)
重启服务器
root@ip-xxx-xxx-xxx:~# /etc/init.d/nginx restart
.
在此之后,您可以将 nginxadd_header Strict..
命令恢复为之前的命令。只需确保再次重复步骤 1-3。
我发现我无法在 Chrome 中删除 HSTS 条目,因为我正在使用 IP 地址进行开发。我似乎无法chrome://net-internals/#hsts
删除该条目。我发现 Chrome 将条目存储在 ../AppData/local/Google/Chrome/User Data/Default/TransportSecurity 中,所以我只是删除了该文件。它当然会删除所有 HSTS 请求,但我怀疑它们会随着时间的推移而重建。
数字 id 对此提供了一些想法。将缓存时间设置为 0 是最好的选择,如果您将其关闭,则需要将其设置为 0 数周以清除客户端浏览器。如果您只需要在 chrome 中清除 HSTS(对于您自己的浏览器),您可以chrome://net-internals/#hsts
在地址栏中使用您的特定浏览器清除您网站的缓存。结合下面的“门口”它变得有用。
您可以通过设置/欺骗自定义标头 => 键来设置临时 HSTS 模式。基本上,如果存在特殊的请求标头,并且它与键匹配,则将 HSTS 设置为您需要的任何缓存时间。这将允许您为除您之外的所有流量打开或关闭 HSTS。在全局启用之前尝试 HSTS 很有用(以确保所有资产正在加载)。如果您想在修复某些东西时暂时清除客户端缓存(为您留出测试空间),这也很有用。
如果您正在开发应用程序/站点并且出于任何原因选择使用域 .dev 或 .app 并且如果您使用 Chrome、Edge(基于 Chromium)作为您的浏览器,您将无法摆脱此错误是因为 Google 购买了 TLD .dev 和 .app 并强制对这些域使用 HTTPS。
这里的“所谓”解决方法是您应该将 .dev 或 .app 更改为其他内容,比如说 .local。
希望这会有所帮助。