社区
网络协议与配置
帖子详情
HTTP协议超时的问题
smallstar02
2019-06-26 05:32:16
我的理解,在TCP协议中,超时判断的基础就是通过数据字节序列号唯一性来判断,那么在HTTP协议中,这个唯一性的ID是啥呢? 看了HTTP消息头的结构,没有啊。。
比如我在同一个页面发了两次完全一样的请求,那么HTTP是咋知道响应的是哪一次请求并分别做超时管理的呢? 请高手解惑下。。
...全文
907
3
打赏
收藏
HTTP协议超时的问题
我的理解,在TCP协议中,超时判断的基础就是通过数据字节序列号唯一性来判断,那么在HTTP协议中,这个唯一性的ID是啥呢? 看了HTTP消息头的结构,没有啊。。 比如我在同一个页面发了两次完全一样的请求,那么HTTP是咋知道响应的是哪一次请求并分别做超时管理的呢? 请高手解惑下。。
复制链接
扫一扫
分享
转发到动态
举报
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
最新官方资源httpclient-4.1.3.jar和httpcore-4.1.4.jar
最新官方资源httpclient-4.1.3.jar和httpcore-4.1.4.jar 适用于HTTP请求类操作
httpclient.jar包下载
httpclient.jar下载 包括code.jar包
HTTP请求
超时
:
问题
、原因与解决方案
重新设置请求头:在发送HTTP请求时,可以修改请求头中的一些字段,以减少HTTP请求的次数。通过设置请求
超时
阈值、限制请求速度、重新设置请求头、加强网络安全等措施,可以有效降低HTTP请求
超时
的发生概率。其他可能的解决方案:如使用CDN加速、优化数据库查询等,都可以有效提高请求响应速度,减少
超时
的发生。设置请求
超时
阈值:在发送请求前,先设置一个合理的
超时
时间,以避免长时间等待无响应的请求。重新设置请求头:通过优化请求头,减少HTTP请求的次数,提高请求的效率。
http 请求
超时
时间设置
HttpParams params = new BasicHttpParams(); //设置连接
超时
时间 Integer CONNECTION_TIMEOUT = 2 * 1000; //设置请求
超时
2秒钟 根据业务调整 Integer SO_TIMEOUT = 2 * 1000; //设置等待数据
超时
时间2秒钟 根据业务调整 //定义了当从ClientConnectionManager
HTTP协议
的
超时
情况
1,在客户端,浏览器控制着浏览器和apache的最大连接
超时
时间。 2,在服务端(不打开防火墙),linux和apache都不能控制最大连接
超时
时间,只有php或者mysql等运行程序通过控制自身的执行时间来控制浏览器和apache的最大连接
超时
时间。 3,在服务端(打开防火墙),linux上的防火墙和php,mysql等共同控制浏览器和apache的最大连接
超时
时间。 4,这里的浏览器和a...
网络协议与配置
1,744
社区成员
1,306
社区内容
发帖
与我相关
我的任务
网络协议与配置
网络协议与配置相关内容讨论专区
复制链接
扫一扫
分享
社区描述
网络协议与配置相关内容讨论专区
网络协议
网络安全
tcp/ip
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章