在ActionController源中,本地请求定义如下:
def local_request? #:doc:
request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end
在我的应用程序中,如果请求来自特定的IP范围,我想使用不同的逻辑。 request.remote_addr
和request.remote_ip
之间有什么区别,我应该使用哪一个?
答案 0 :(得分:13)
我是remote_ip
当前实现的作者,其中包括检查IP欺骗攻击以及正确处理多个X-Forwarded-For
标头。但是有一个很大的警告:只有一些Ruby Web服务器支持多个标头,因此值仍然可能是错误的。
我编写了测试最流行的Ruby应用服务器on my blog的结果,您可能需要查看重复的标头是否对您的应用程序很重要。
答案 1 :(得分:9)
似乎情况是remote_addr
按原样返回REMOTE_ADDR
环境变量的值,而remote_ip
会根据HTTP_X_FORWARDED_FOR
的存在来调整此值还有HTTP_CLIENT_IP
个变量,例如您通过代理转发客户端时的变量。
对local_request?
的双重检查只是确定用户来自本地计算机的一种方式,而不是简单地从其他地方通过本地代理转发。