百科问答小站 logo
百科问答小站 font logo



http是应用层,ip是网络层,那么http请求头部的client ip是怎么获取到的呢? 第1页

  

user avatar   han-xiao-23-25 网友的相关建议: 
      
http协议是应用层,客户端发起http请求时,可以带上一个client_ip的参数带上客户端的地址,但是在构造请求报文的时候还没有到ip层,http如何得知client_ip填入什么地址呢?

在高层准备数据前,底层确实还没有开始准备该层对应的数据,但底层协议栈初始化必然是已经完成了的。协议栈初始化完成,则IP之类的底层参数一定是确认了的。粗略一点讲,从HTTP往下面的协议栈都由OS负责初始化且确立可用后,OS才会接受你调用sock API去建立连接发送数据,此时你用相应API获得例如本机IP这样的底层参数,再带入HTTP数据中,是没有顺序问题和逻辑矛盾的。

另外如果客户端是处于内网,构造出来client_ip填的是私网的地址,到了NAT的设备,只把ip层的ip地址做了转换,那http头部的client_ip怎么办?谁负责转换呢?

没人做,除非你需要做且自己负责完成。举个例子,FTP一种工作模式需要一个额外的控制端口,此端口分配是FTP服务器自己完成且附送在控制命令里发送的,NAT就翻译不了这个端口,于是需要额外的NAT Helper来完成这个事情。

至于你说的client_ip因为没有详细说明不好断定到底是什么场景。

  • 假如是指socks API里的本端地址,可以不写由OS分配本机可用IP。同时因为是四层TCP协议的五元组之一,NAT可以处理;
  • 如果你是指HTTP请求经由HTTP Proxy带的那个X-Forwarded-For头,那个是Proxy填写的,属于协议RFC推荐,实现与否取决于Proxy是否良心;
  • 再如果只是你自己的应用需要带这么个参数在HTTP请求数据里,那假如没人替你做转换的情况下,你绝大多数可能是收到一个NAT后面的私有IP。




  

相关话题

  如何在家庭布设万兆局域网? 
  COOKIE和SESSION有什么区别? 
  近几年有哪些已经形成各类游戏网页广告的精神污染的页游代言人? 
  TP-LINK 发布全球最薄的纸片路由器 ,轻薄机型散热效果如何? 
  基于UDP实现的可靠传输协议(比如uTP),与TCP协议相比有什么优缺点? 
  百度云等对非会员用户实行限速措施是否违法? 
  现有的技术能否在同一个局域网内让一台电脑上正在进行的工作转移到另一台设备? 
  5G 不是号称可以超大容量吗?为什么现在人多的地方还是会满格信号无法上网? 
  TCP链接之间的网络物理断开了然后有连上,这个TCP链接是否断开? 
  最近家里装了个监控,和路由器连在一起,感觉网卡爆了,原来100兆网,现在玩个游戏都卡,是什么原因? 

前一个讨论
人类排放的二氧化碳溶于水增加海洋酸性,会溶解珊瑚(主要组成是碳酸钙)吗?
下一个讨论
数据库事务原子性、一致性是怎样实现的?





© 2025-05-06 - tinynew.org. All Rights Reserved.
© 2025-05-06 - tinynew.org. 保留所有权利