我有一个有趣的小问题 - Heroku上的应用程序配置为使用Heroku SSL (beta),但似乎想要使用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
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?非常感谢你。
答案 0 :(得分:0)
检查您的浏览器是否因为之前的HSTS header而导致重定向。
在Rails上启用force_ssl
时,中间件会自动附加标题:
Strict-Transport-Security
到期为1年。如果您随后禁用它,您的浏览器将保留信息直到过期,并且无论如何都将拒绝连接到该站点的HTTP版本。
您可以从浏览器中删除该设置。但是,请注意,之前访问过您网站的任何用户都会受到与HSTS标头相同的行为的影响。
因此,为了保持与先前访问过该站点的用户的兼容性,您仍应提供HTTPS版本并避免发送HSTS标头(或将其设置为非常短的过期时间)。