我是靠谱客的博主 坚定草莓,最近开发中收集的这篇文章主要介绍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缓冲区复制给用户空间的进程。

最后

以上就是坚定草莓为你收集整理的web服务器如何获取用户信息,http协议-web服务端是从哪里获取客户端ip的,求底层详细分析...的全部内容,希望文章能够帮你解决web服务器如何获取用户信息,http协议-web服务端是从哪里获取客户端ip的,求底层详细分析...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部