【问题标题】:Heroku app insisting on HTTPS - why?Heroku 应用程序坚持使用 HTTPS - 为什么?
【发布时间】:2016-11-16 16:19:18
【问题描述】:

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

宝石文件:

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

生产.rb:

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

应用程序.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?非常感谢。

【问题讨论】:

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


【解决方案1】:

检查您的浏览器是否因为以前的HSTS header 而没有重定向。

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

Strict-Transport-Security

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

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

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

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 2013-06-06
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多