即使我禁用了ssl,也会使用Rails 3.1 ssl?

时间:2011-10-26 18:24:40

标签: ruby-on-rails

我已在force_ssl中添加ApplicationController,稍后会删除,但现在,每个请求仍会提示为https。我曾尝试将config.force_ssl = false添加到application.rbenvironments/development.rb等所有配置文件中,但它不起作用。当我重新启动服务器时,请求仍然会转换为https。任何线索?

更新: 只有在我请求应用程序的根目录时才会发生这种情况。 http://localhost:3000/,但在我的config / routes.rb文件中,我已明确指定了根目录的网址:root :to => 'home#index'

5 个答案:

答案 0 :(得分:12)

您会看到HTTP Strict Transport Security max-age的效果,Rack::SSLconfig.force_ssl = true({{1}}设置)设置为高点。

答案 1 :(得分:3)

除了重新启动应用程序外,您还必须清除浏览器缓存。

答案 2 :(得分:1)

对于那些仍然不清楚的人来说,这就是我做的伎俩。

在application_controller.rb中:

before_filter :expire_hsts

[...]
private
  def expire_hsts
    response.headers["Strict-Transport-Security"] = 'max-age=0'
  end

在production.rb

config.force_ssl = false

清除网络浏览器的缓存,就是这样!

答案 3 :(得分:0)

yfeldblum绝对正确。禁用它并使chrome忘记标题可能会很痛苦。

这是我最终放入config / application.rb

的内容
config.middleware.insert_before(Rack::Lock, Rack::SSL, hsts: false, exclude: proc { |env|
  !env['PATH_INFO'].start_with?('/manage')
})

**注意A:hsts:false是关键位

**注意B:我使用的是1.9,所以我的哈希语法可能与你的不同。

除此之外,我必须在Chrome chrome:// net-internals / #hsts中打开此网址并删除具有此标头集的域。

值得庆幸的是,这并没有让它产生,因为Rack :: SSL在这个标题上设置了很长的过期时间。

答案 4 :(得分:0)

如果您使用的是nginx,请参阅选项:

proxy_set_header X-Forwarded-Proto https;

并禁用它!