【问题标题】:Ruby on Rails - request.env['HTTP_REFERER'] returns nilRuby on Rails - request.env['HTTP_REFERER'] 返回 nil
【发布时间】:2010-06-23 19:10:26
【问题描述】:

我正在尝试保存 http_referer,以便在用户登录后将其发送回该 url。现在我的控制器中有一个 before_filter,如果尚未创建会话,则将它们发送到登录页面通过redirect_to。但是,当我检查 HTTP_REFERER 时,它是 nil(而 'REQUEST_URI' 确实返回了我最初来自的地方)。

谢谢。

【问题讨论】:

    标签: ruby-on-rails authlogic


    【解决方案1】:

    HTTP_REFERER 是浏览器在请求中设置的 HTTP 标头,其中包含上一个网页的地址,从该网页链接到当前请求的页面。直接导航到页面时将不设置

    REQUEST_URI(也可通过request.request_uri() 获得)是用于访问 Rails 控制器/动作的统一资源标识符,应该始终设置

    将此调试代码放入您的视图中:

    <ul>
    <% request.env.each do |item| %>
        <li><%= item[0] %> : <%= item[1] %></li>
    <% end %>
    </ul>
    

    如果未设置 HTTP_REFERER,请确保您通过链接或重定向导航到该页面,然后查看是否已设置。

    您的浏览器也有可能是not setting HTTP_REFERER 标头。确保您没有影响这一点的附加组件。您可以使用名为 Tamper Data 的漂亮 Firefox 插件来查看正在发送的标头。

    【讨论】:

    • 是的,它没有显示,但是,您给我的代码显示请求通过了我的内部防火墙,这很可能过滤了我需要的数据....感谢代码!
    • @Naujpr:我已更新我的答案以包含指向篡改数据的链接,这可能会帮助您解决问题。祝你好运!
    【解决方案2】:

    无论你想出什么解决方案,你都需要能够处理空的referer case,因为客户可以选择是否指定它。 (例如,当您处于 Safari 的隐私浏览和 Chrome 的隐身模式时,它会关闭)

    在 Rails 中,您可以使用redirect_to :back,如果设置了 HTTP_REFERER,它将使用它,否则会引发错误。

    使用redirect_to :back 时,如果没有referrer,则会引发RedirectBackError。您可以通过抢救 RedirectBackError 为这种情况指定一些回退行为。

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多