代码之家  ›  专栏  ›  技术社区  ›  jrdioko

Rails操作控制器:request.remote_ip和request.remote_addr之间的差异

  •  12
  • jrdioko  · 技术社区  · 14 年前

    在ActionController源中,本地请求定义如下:

    def local_request? #:doc:
        request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
    end
    

    在我的应用程序中,如果请求来自特定的IP范围,我希望使用不同的逻辑。两者有什么区别 request.remote_addr request.remote_ip 我应该用哪一个?

    2 回复  |  直到 14 年前
        1
  •  13
  •   indirect    13 年前

    我是 remote_ip 以及它所做的其他事情,包括检查IP欺骗攻击和正确处理多个 X-Forwarded-For 标题。不过,有一个很大的警告:只有一些RubyWeb服务器支持多个头部,所以这个值仍然可能是错误的。

    我写下了测试最流行的Ruby应用服务器的结果 on my blog ,如果重复的头对于应用程序很重要,则可能需要检查它。

        2
  •  9
  •   tadman    14 年前

    似乎是这样的 remote_addr 返回的值 REMOTE_ADDR 环境变量原样,而 remote_ip 将根据存在的 HTTP_X_FORWARDED_FOR HTTP_CLIENT_IP 变量也一样,比如当您的客户机通过代理进行转发时您可能拥有的变量。

    那张支票 local_request? 只是一种确定用户来自本地机器的方法,而不是简单地通过本地代理从其他地方转发。

    推荐文章