HTTP协议中的长连接,读完之后,大部分程序员收藏了...( 二 )
HTTP1.1规定了默认保持长连接(HTTP persistent connection , 也有翻译为持久连接) , 数据传输完成了保持TCP连接不断开(不发RST包、不四次握手) , 等待在同域名下继续用这个通道传输数据;相反的就是短连接 。
HTTP首部的Connection: Keep-alive是HTTP1.0浏览器和服务器的实验性扩展 , 当前的HTTP1.1 RFC2616文档没有对它做说明 , 因为它所需要的功能已经默认开启 , 无须带着它 , 但是实践中可以发现 , 浏览器的报文请求都会带上它 。 如果HTTP1.1版本的HTTP请求报文不希望使用长连接 , 则要在HTTP请求报文首部加上Connection: close 。 《HTTP权威指南》提到 , 有部分古老的HTTP1.0 代理不理解Keep-alive , 而导致长连接失效:客户端-->代理-->服务端 , 客户端带有Keep-alive , 而代理不认识 , 于是将报文原封不动转给了服务端 , 服务端响应了Keep-alive , 也被代理转发给了客户端 , 于是保持了“客户端-->代理”连接和“代理-->服务端”连接不关闭 , 但是 , 当客户端第发送第二次请求时 , 代理会认为当前连接不会有请求了 , 于是忽略了它 , 长连接失效 。 书上也介绍了解决方案:当发现HTTP版本为1.0时 , 就忽略Keep-alive , 客户端就知道当前不该使用长连接 。 其实 , 在实际使用中不需要考虑这么多 , 很多时候代理是我们自己控制的 , 如Nginx代理 , 代理服务器有长连接处理逻辑 , 服务端无需做patch处理 , 常见的是客户端跟Nginx代理服务器使用HTTP1.1协议&长连接 , 而Nginx代理服务器跟后端服务器使用HTTP1.0协议&短连接 。
推荐阅读
- 手机游戏|3年内不得转会FNC!G2老板被爆与C9达成秘密协议,Perkz转会受阻
- 热血传奇|热血传奇:当年心中的巅峰,随便一件无比骄傲
- 手办|原神:“肝帝”再现!玩家花30天自制胡桃手办,手中的护摩亮了
- edg战队|EDG夺冠可谓是小说中的梦幻剧情,先破RNG再废GEN.G,豪虐DK夺冠
- 亚运会|LOL入选亚运会正赛,你心中的阵容怎么选?
- 孙权|三国杀:背景帝!武将皮肤中的最强客串王,孙十万果然名不虚传
- 夏侯惇|王者荣耀之中的“最强坦克”, 夏侯惇和程咬金你更喜欢谁?
- 穿越火线|轻松上手,赶超雷神:盘点CF中那些神枪中的天之骄子
- 明日之后|消逝的光芒2设计师:明日之后打造了我心目中的人尸大决战
- 老玩家|天龙网游:天龙游戏中的神奇玩法,没有经历过别说自己是老玩家