概述
在HTTP服务器收到来自HTTP客户端的请求,HTTP协议是建立在TCP协议之上的。
服务器收到请求后,会为每个请求建立一个请求的头部,这个head包含了客户端的浏览器发送的一些HTTP协议标准的信息。例如Host、User-Agent等。
但是这个head里的客户端IP地址,是HTTP服务器通过查看底层的TCP通讯中的socket描述符,找到客户端的IP地址。
例如在python的tornado中,在httpserver.py中有一段:
HTTPRequest wants an IP, not a full socket address
得到HTTP客户端的IP地址
if getattr(self.stream.socket, 'family', socket.AF_INET) in (
socket.AF_INET, socket.AF_INET6):
Jython 2.5.2 doesn't have the socket.family attribute,
# so just assume IP in that case.
remote_ip = self.address[0]
else:
# Unix (or other) socket; fake the remote address
remote_ip = '0.0.0.0'
self.address就是TCP服务器得到的客户端IP地址和端口号,所以在构造客户端请求head的时候,是从这里得到的。
并且从TCP服务器得到客户端的IP地址,这个动作是OS的内核维护的,这个动作涉及到了OSI三层和四层的操作。
下四层是OS的协议栈做的事情,而上三层是应用程序应该做的。
内核为每个进程维护socket fd,当进程请求读写数据的时候,内核就将data从socket缓冲区复制给用户空间的进程。
最后
以上就是坚定草莓为你收集整理的web服务器如何获取用户信息,http协议-web服务端是从哪里获取客户端ip的,求底层详细分析...的全部内容,希望文章能够帮你解决web服务器如何获取用户信息,http协议-web服务端是从哪里获取客户端ip的,求底层详细分析...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复