【问题标题】:How to remove infinite redirect loop after I set force_ssl to false in heroku?在heroku中将force_ssl设置为false后如何删除无限重定向循环?
【发布时间】:2012-05-02 20:15:17
【问题描述】:

我正在开发一个 Rails 3.1.0 应用程序,该应用程序需要在某些页面中使用 ssl,具体取决于用户。

我在 config/enviroments/staging.rb 中将 config.force_ssl 设置为 false。添加了决定是否重定向到 http 的 before 过滤器。如果我清理缓存,重定向在开发中有效。

事情正在暂存,它会导致重定向循环。我相信 force_ssl 使用永久重定向,因此当 DNS 被问及我的应用程序中的页面时,它仍然尝试使用 ssl 重定向到页面。这有道理吗?

我有什么选择?

编辑

我清理了缓存。这只解决了我第一次进入页面时的问题。假设我刷新所有缓存并进入 http 页面。这将显示 http 页面。当我退出页面时,进入另一个有ssl的页面并尝试返回http页面,无限重定向再次开始。

我实施的解决方案是重定向到不安全的子域。让我们称之为“不安全”。所以当我需要重定向到一个http页面时,我会重定向到http://unsafe.mydomain.com。这样就解决了无限重定向,但是一些https页面还在缓存中。

我想真正的问题是什么时候使用 :status => :moved_permanently 有用,因为它似乎会导致页面缓存并且很难清理这个缓存?

【问题讨论】:

  • 尝试清除缓存。
  • 感谢布鲁诺的建议,我用回复更新了我的答案..

标签: ruby-on-rails ssl ruby-on-rails-3.1 dns


【解决方案1】:

首先,您为什么不对所有页面强制使用 SSL?性能开销很小,但在混合模式下运行,如果您不小心,您可能会泄露您认为安全的 cookie。 SSL 无处不在 :)

现在对于您的问题,我怀疑这与 DNS 有什么关系,并且更有可能与模式匹配逻辑的正则表达式有关,它应该在何时重定向。它是否包括主机名/域?如果是,它是否与您在暂存中运行的域匹配?

【讨论】:

  • 大部分同意,但不是正则表达式,它可能与permanent redirect 有关:“已为请求的资源分配了一个新的永久 URI 以及对该资源的任何未来引用应该使用返回的 URI 之一".
  • 所有页面都被 SSL 强制执行。我讨厌做这个补丁。只是我们集成了 SMS 支付服务(paygol),实现它的唯一方法是通过 iframe。该服务没有 ssl,因此 Internet Explorer 不会将其呈现在安全页面中。
  • @e3matheus,告诉浏览器继续使用 SSL 实际上是件好事。这就是HSTS 的意义所在。 (也许this 对您来说也很有趣。)不要将 HTTPS iframe 放入普通的 HTTP 页面:这会破坏他们使用 SSL 的意义,因为用户将无法检查他们是否正在使用SSL。那只是不好的做法。
  • 我想我把你弄糊涂了。它不是 http 页面内的 https 框架。这是一个带有 http 框架的 https 页面。这就是问题所在。如果服务有 SSL,一切都会正常工作,我需要重定向到 http 页面。
  • 似乎问题在于应用程序是 HTTPS,但支付提供商只提供了在 iframe 中嵌入 HTTP 的选项。所以是的,它的混合内容......
猜你喜欢
  • 2012-03-15
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
相关资源
最近更新 更多