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

时间:2016-07-13 22:06:48

标签: ruby-on-rails ruby-on-rails-4 ssl heroku

我有一个有趣的小问题 - 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

我尝试在一个控制器上避免使用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?非常感谢你。

1 个答案:

答案 0 :(得分:0)

检查您的浏览器是否因为之前的HSTS header而导致重定向。

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

Strict-Transport-Security

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

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

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