首先这里简单提及一下HTTP协议,HTTP协议是位于应用层面向对象的协议,现在WWW中使用的是HTTP/1.1版本,关于HTTP/1.0也是今天要说的内容。
HTTP1.1比特HTTP1.0相比而言,最大的区别就是增加了持久连接支持。
在HTTP/1.0中,默认使用的是短连接。即浏览器和服务器每进行一次HTTP操作,就会建立一次连接,任务结束就断开连接。当浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(Js文件、css文件等),就会建立一个HTTP会话。
在HTTP/1.1起,默认使用长连接。用以保持连接特性。【长连接通常在响应头会添加 Connection:keep-alive 】。使用长连接的情况下,当某个网页打开完毕之后,客户端和服务器之间的TCP连接不会关闭,如果客户端再次访问该服务器上的网页,会使用上一次已经建立的连接。长连接不是永久保持连接,它有一个保持时间。实现长连接的前提是客户端和服务器端都需要支持长连接。
我们都知道,HTTP是基于TCP的应用层协议。HTTP的长连接和短连接,本质上是 TCP长连接和短连接。
基于TCP的协议,在数据通信之前需要完成三次握手,结束通信需要完成四次挥手。每次建立连接都是需要时间代价的。
1、短连接
模型:连接—–传输数据—–关闭连接
短连接是指三次握手建立连接之后,client向server发送消息,然后server回复client消息,一次读写操作完成之后,发起断开连接请求。一般情况下,close动作是由client发起的。
2、长连接
连接—–传输数据—–保持连接—–传输数据—–保持连接…..关闭连接
长连接指三次握手建立连接后,完成一次读写操作,一段时间内,该连接不会关闭,之后如果还有向该server发起的数据读写,仍然使用该该连接。这与之前提到的TCP通信过程类似,因为要考虑在连接保持期间client始终处于正常状态(防止server端保存大量的半连接状态的socket),这就要牵扯到之前的TCP维护的四个定时器中的保活寄存器。相对于短连接而言,长连接安全性一般。
3、长连接和短连接的特点
对于短连接而言,管理起来较为简单,因为短连接存在的连接都是有效的,不需使用额外的方法来维护;带来的缺点就是多次建立连接的请求,时间代价较大,占用的带宽也是一个很大的问题。
对于长连接,client端通常不会主动关闭连接,而是由服务器决定的。因此server需要提供一套机制来管理这些保持的连接。如果client连接server之后,长时间没有进行传递,大量的client连接会使server的负担加重,因此server需要提供一种机制,用来关闭即使client处于正常状态但长时间没有进行数据通信的连接,如果条件允许,可以在server端限制最大连接数,来避免个别客户端对服务器的拖累。
4、使用场合
长连接多用于操作频繁,点对点的通信,且连接数不太多的情况。如数据库的连接使用长连接。短连接要求每次数据处理之前,都需要建立连接,对于需要大量访问数据库的操作,建立连接是对资源极大的浪费,而且容易导致socket错误。
短连接通常用于大型网站的访问。原因很简单,成千上万的client访问server,如果每个client保持一个连接,服务器是难以负荷的。即使可以调度,代价也是很大的。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142845.htm