web服务器如何获取用户信息,http协议-web服务端是从哪里获取客户端ip的,求底层详细分析...

在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缓冲区复制给用户空间的进程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值