当 HTTP 连接池遇上 KeepAlive 时 http的keep-alive和tcp的keepalive区别

https://mp.weixin.qq.com/s?__biz=MzUzMTA2NTU2Ng==&mid=2247485891&idx=2&sn=82dd4786e38e23a10fa9210745c99130&chksm=fa497672cd3eff64fb06873ba909140f6f839f9565e2815eff5476102e91b60f46b67ea5acab&mpshare=1&scene=1&srcid=1224grAV7qLPEUdAheKysfbY&key=2839d46a2ccd1ada80a45616e1459f652a2d24283411ee5192afdf9e25742273e3831395db8536585af5fe7013dc05cc705f68ab85bda36bec98f5ebbd16eb072fb6615bfaaa25fdaefe047387efad61&ascene=0&uin=MTA2NzUxMDAyNQ%3D%3D&devicetype=iMac+MacBookAir6%2C2+OSX+OSX+10.10.5+build(14F2511)&version=11020012&lang=zh_CN&pass_ticket=NKOOH07PkTOF951qDy4B3Lw7qqHzzY35y1dPWQP56ICdSnZ6tBfyKRtR6PKeE1%2FM

1)该文有一个错误之处 :

http的keepalive:用于http协议。在http 1.1中,为了解决长连接提出的。

这个并不是http 1.1中提出的,1.0中已提出,但需要客户端显式描述keeplive,而在http 1.1中,默认开启

2)http的keep-alive和tcp的keepalive区别

3)tomcat http 1.0实现

tomcat8中,如果发送的是http1.0的协议。 tomcat8返回的均是1.1的协议。并且不管请求的header有没有Connection:keepalive ,均会在返回的header中加上connection:close 。下面是访问tomcat8的截图:

  • GET请求是http 1.0,但是返回的是1.1的协议:

  • 返回的header里面有Connection:close

4)tomcat http 1.1实现

tomcat8主要有两个参数来控制keepalive的机制。keepAliveTimeout 和maxKeepAliveRequests

  • keepAliveTimeout: 默认和soTimeout 值保持一致,该值为20000ms,也就是在这么长时间内没有通信,tomcat会关闭掉该连接。设置为-1 则代表不会关闭该连接。

  • maxKeepAliveRequests :默认为100,也就是在keepAliveTimeout时间内,如果使用次数超过100,则会关闭掉该连接。设置为-1,则代表不会关闭连接。在关闭后,会在返回的header上面加上Connection:close 。

如果需要tomcat保持长连接:可配置 maxKeepAliveRequests = "-1" keepAliveTimeout=-"-1" ,则tomcat8不会关闭掉该连接。

 

 

猜你喜欢

转载自www.cnblogs.com/silyvin/p/10224076.html