案例1:打开虎扑网页,发现一个数据流,只要打开虎扑内部任意url都会触发该流,该流有tcp keepalive机制,无通信的情况下,45s交互一次,最多交互3次,再隔45s,服务端主动断开。期间关闭网址并不会断开连接。但是关闭浏览器,客户端会主动断开连接。
案例2:测试虎扑某网址,浏览器自动重复加载某个gif,持续大约四分钟后,服务器端主动断开,如果中途关闭浏览器,客户端会自动断开
案例3:百度搜索,没有信息后,心跳包15s发送一次,共交互5次,服务端主动断开连接。
案例4:微信通过8080端口进行通信,tcp保持长连接,当发送信息时,客户端发送相应报文,服务端回应相应报文;接收信息时,相反。并未发现微信类似于tcp报活的心跳包,连接只发现在关闭微信软件时才会断开。(可能keepalive时间特别长。)
总结:HTTP1.2通常建立的是tcp的长连接,但是keepalive参数的跨度可能比较短,为了便于http多个任务用单一tcp进行数据传输。如果多次心跳互发仍没有新的任务,连接会断开。打开多个网页可能都会用到同一个tcp连接。同一个网址会打开大量tcp连接!
案例5:有个tcp,不会发送keepalive包,而是在无交互持续25s后直接断开。这种连接似乎都没有传送数据。
总结:应该是没有心跳机制的长连接。
案例6:极少数的tcp,传输完数据后,客户端就直接选择断开。应该就是传说中的短连接了。
总结:让人惊讶的是,短连接的数目远远小于长连接。
在HTTP/1.0中,默认使用的是短连接。但从 HTTP/1.1起,默认使用长连接,用以保持连接特性,当然其也支持短连接。HTTP的长短连接是基于TCP的。