HTTP协议超时的问题

smallstar02 2019-06-26 05:32:16
我的理解,在TCP协议中,超时判断的基础就是通过数据字节序列号唯一性来判断,那么在HTTP协议中,这个唯一性的ID是啥呢? 看了HTTP消息头的结构,没有啊。。

比如我在同一个页面发了两次完全一样的请求,那么HTTP是咋知道响应的是哪一次请求并分别做超时管理的呢? 请高手解惑下。。
...全文
906 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
MikeCheers 2019-09-17
  • 打赏
  • 举报
回复
我的猜测(没有去验证):Client发起一个请求,无非就是建立了一个TCP连接。
两个相同的请求:我们的感知,无非就是两次请求所发送的数据是一样的。

但是到了TCP协议层,它就不管你的数据是不是一样的了,对它而言,就是需要建立两个连接,而建立连接,无非就是找个可用的端口,去连服务器的指定端口。也就是说,区分两个请求,其实是两个不同的端口而已。
至于两次请求都是使用相同的端口,无非就是第一次请求已经结束了,那个端口变得可用了。
smallstar02 2019-09-16
  • 打赏
  • 举报
回复
感谢楼上的回复,后面我自己查了资料,看了Node.js的异步回调机制,HTTP1.0 Client,应该是按照请求的先后顺序来进行超时,应答回调管理的,HTTP2.0有了多路复用,可能是根据流ID啥的。。
MikeCheers 2019-07-27
  • 打赏
  • 举报
回复
HTTP是基于TCP协议的,HTTP本身并不维护连接状态,包括TCP也一样,也不维护,被称为面向无连接的通讯协议。

你所谓的超时管理,并非是HTTP做的,而是由发起请求的Client来做的,比如HttpClient,与协议本身没有太大关系。

至于请求与回复是怎么对应起来的,这个,说起来比较复杂了,需要了解更底层的TCP、IP、以及少量的Ethernet II协议的工作原理了,
简单的说:
1,就是Ethernet处理MAC地址的对应关系,IP处理IP地址的对应关系及指示承载的协议类型(比如,TCP\UDP),TCP处理端口的对应关系,这样就比较明确一次通讯的源机器及端口和目标机器及端口了。
2,两台机器的固定端口间,也会有频繁的通讯,如何区分对应关系,是通过TCP协议的Flags与[SequenceNumber]和[AcknowledgementNumber]来配合完成的,当然,这是一个比较负责的机制,深入研究的话,去找找相关资料,咱们这里简单说,SequenceNumber就是这次通讯,我的ID是SequenceNumber,我期望你给我回复的时候,使用的ID是[AcknowledgementNumber],这样,一个单工的通讯就被建立起来了,逐渐形成一条很长的通讯链。但实际情况是,还有双工的存在,以及三次握手,四次挥手,使得情况变得复杂,就不细说了。
3,回到你说的超时的问题上,HTTP Client可以控制等待回复的时间,不是HTTP本身,当Client超时了,它就会把控制权返回给应用程序,而不会造成用户的漫长等待,而在底层,这件事情还并没有就此结束,TCP本身的机制使得它还在继续尝试连接,有几次重试的过程,也不细说了。主旨就是这件事情要分开看,不明确你到底想要知道哪个层面的。

各层协议栈的关系:
------------------------------------------------------------------------------
HTTP | FTP | Others....
------------------------------------------------------------------------------
TCP | UDP | Others....
------------------------------------------------------------------------------
IP Protocol Stack
------------------------------------------------------------------------------
Ethernet II
------------------------------------------------------------------------------

基于IP的协议栈:
/*
* Protocols
*/
000 ----------- IP /* dummy for IP */
001 ----------- ICMP /* control message protocol */
002 ----------- IGMP /* group management protocol */
003 ----------- GGP /* gateway^2 (deprecated) */
006 ----------- TCP /* tcp */
012 ----------- PUP /* pup */
017 ----------- UDP /* user datagram protocol */
022 ----------- IDP /* xns idp */
077 ----------- ND /* UNOFFICIAL net disk proto */
255 ----------- RAW /* raw IP packet */
256 ----------- MAX

TCP协议的Flags:
0x01 ----------- FIN
0x02 ----------- SYN
0x04 ----------- RST
0x08 ----------- PSH
0x10 ----------- ACK
0x20 ----------- URG

1,744

社区成员

发帖
与我相关
我的任务
社区描述
网络协议与配置相关内容讨论专区
网络协议网络安全tcp/ip 技术论坛(原bbs)
社区管理员
  • 网络协议与配置社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧