Ruby on Rails - request.env ['HTTP_REFERER']返回nil

时间:2010-06-23 19:10:26

标签: ruby-on-rails authlogic

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

谢谢。

2 个答案:

答案 0 :(得分:12)

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插件来查看正在发送的标头。

答案 1 :(得分:6)

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

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

  

使用redirect_to:back时,如果没有referrer,将引发RedirectBackError。您可以通过挽救RedirectBackError来为此案例指定一些回退行为。