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标头(或将其设置为非常短的过期时间)。