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