社区
网络协议与配置
帖子详情
HTTP协议超时的问题
smallstar02
2019-06-26 05:32:16
我的理解,在TCP协议中,超时判断的基础就是通过数据字节序列号唯一性来判断,那么在HTTP协议中,这个唯一性的ID是啥呢? 看了HTTP消息头的结构,没有啊。。
比如我在同一个页面发了两次完全一样的请求,那么HTTP是咋知道响应的是哪一次请求并分别做超时管理的呢? 请高手解惑下。。
...全文
1168
3
打赏
收藏
HTTP协议超时的问题
我的理解,在TCP协议中,超时判断的基础就是通过数据字节序列号唯一性来判断,那么在HTTP协议中,这个唯一性的ID是啥呢? 看了HTTP消息头的结构,没有啊。。 比如我在同一个页面发了两次完全一样的请求,那么HTTP是咋知道响应的是哪一次请求并分别做超时管理的呢? 请高手解惑下。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
HTTP协议
在C#大文件上传中如何处理
超时
问题
?
【一个C#外包仔的2G文件上传生死劫:从WebUploader到.NET Core自救指南】"老板,这个需求…可能需要加钱。“我盯着客户发来的PDF,手指在"支持2G文件批量上传"那行字上疯狂颤抖。作为同时会修打印机和写ASP.NET Core的"全栈艺术家”,我深知这次要面对的是三重暴击:Vue2的兼容性、SQL Server的存储压力,还有那个该死的WebUploader——它现在就像个被拔掉电池的玩具,在控制台里躺着闪红灯。
HTTP请求
超时
:
问题
、原因与解决方案
重新设置请求头:在发送HTTP请求时,可以修改请求头中的一些字段,以减少HTTP请求的次数。通过设置请求
超时
阈值、限制请求速度、重新设置请求头、加强网络安全等措施,可以有效降低HTTP请求
超时
的发生概率。其他可能的解决方案:如使用CDN加速、优化数据库查询等,都可以有效提高请求响应速度,减少
超时
的发生。设置请求
超时
阈值:在发送请求前,先设置一个合理的
超时
时间,以避免长时间等待无响应的请求。重新设置请求头:通过优化请求头,减少HTTP请求的次数,提高请求的效率。
网络基础(二)--- HTTP/TCP/UDP协议
本文主要介绍了应用层协议HTTP的格式,序列化和反序列化;传输层UDP/TCP的数据段格式和特点,其中详细介绍了TCP如何提供可靠数据传输的策略。
HTTP 调用最常遇到的
超时
、重试和并发
问题
对于 HTTP 调用,虽然应用层走的是 HTTP 协议,但网络层面始终是 TCP/IP 协议。TCP/IP 是面向连接的协议,在传输数据之前需要建立连接。几乎所有的网络框架都会提供这么两个
超时
参数: 连接
超时
参数 ConnectTimeout,让用户配置建连阶段的最长等待时间; 读取
超时
参数 ReadTimeout,用来控制从 Socket 上读取数据的最长等待时间。 正确理解和配置这两个参数,对业务应用特别重要,毕竟
超时
不是单方面的事情,需要客户端和服务端对
超时
有一致的估计,协同配合方能平衡吞吐量和错误
HTTP
超时
与故障测试实战
在 HTTP 协议中,常见的
超时
类型包括连接
超时
(Connect Timeout)、写
超时
(Write Timeout)和读
超时
(Read Timeout)。这三种
超时
机制虽然都与请求失败有关,但它们发生的时机、触发条件以及产生的影响各不相同,了解底层原理有助于我们更精准地定位和模拟故障。
网络协议与配置
1,748
社区成员
1,304
社区内容
发帖
与我相关
我的任务
网络协议与配置
网络协议与配置相关内容讨论专区
复制链接
扫一扫
分享
社区描述
网络协议与配置相关内容讨论专区
网络协议
网络安全
tcp/ip
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章