Heroku app坚持使用HTTPS – 为什么?

我有一个有趣的小问题 – Heroku上的应用程序配置为使用Heroku SSL(测试版),但似乎想要使用HTTPS来处理所有事情,不管我做什么。

浏览器错误:

我在一个控制器上有redirect_to :protocol => 'http://', :status => :moved_permanently 。 对此控制器的请求获得:

 www.mysite.com redirected you too many times. ERR_TOO_MANY_REDIRECTS 

相关代码:

DNS设置:

 ftp: www.mysite.com.herokudns.com www: www.mysite.com.herokudns.com 

的Gemfile:

 gem 'rack-ssl-enforcer' gem 'rack-cors' 

production.rb:

 ** Not in effect** #config.force_ssl = true 

application.rb中:

 # Note: no code inserted for rack-ssl-enforcer config.middleware.insert_before 0, 'Rack::Cors' do allow do origins '*' resource '*', headers: :any, methods: [:get] end end 

我尝试在一个控制器上避免使用HTTPS:

requests_controller.rb:

 before_action :avoid_ssl def avoid_ssl if request.ssl? && Rails.env.production? redirect_to :protocol => 'http://', :status => :moved_permanently end end 

我最近添加到requests_controller.rb的代码已启动此错误。 我的应用程序中有些东西想要一切都是HTTPS,但Heroku的支持告诉我:

“Heroku SSL没有什么特别之处,重定向必须在你的应用程序中执行 – 为了给定的控制器跳过’强制SSL’,这是代码更改”。

什么可能导致一切都指向HTTPS? 非常感谢你。

检查您的浏览器是否因为以前的HSTS标头而未重定向。

在Rails上启用force_ssl时,中间件会自动附加标头:

 Strict-Transport-Security 

期满为1年。 如果您随后禁用它,您的浏览器将保留信息直到过期,并且无论如何都将拒绝连接到该站点的HTTP版本。

您可以从浏览器中删除该设置。 但是,请注意,之前访问过您网站的任何用户都会受到与HSTS标头相同的行为的影响。

因此,为了保持与之前访问过该站点的用户的兼容性,您仍应提供HTTPS版本并避免发送HSTS标头(或将其设置为非常短的过期时间)。