gpt4 book ai didi

ruby-on-rails - Heroku 应用程序坚持使用 HTTPS - 为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:32 25 4
gpt4 key购买 nike

我有一个有趣的小问题 - Heroku 上的一个应用被配置为使用 Heroku SSL (beta)但无论我做什么,它似乎都想对所有内容使用 HTTPS。

浏览器错误:

我在一个 Controller 上有 redirect_to :protocol => 'http://', :status => :moved_permanently。对该 Controller 的请求得到:

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 文件:

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

我试图在一个 Controller 上避免使用 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 没有什么特别之处,必须在您的应用程序内部执行重定向 - 要跳过给定 Controller 的‘强制 SSL’,这是代码更改”。

什么可能导致一切都指向 HTTPS?非常感谢。

最佳答案

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

当您在 Rails 上启用 force_ssl 时,中间件会自动附加 header :

Strict-Transport-Security

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

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

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

关于ruby-on-rails - Heroku 应用程序坚持使用 HTTPS - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38362500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com