通信中无连接的含义是限制每次连接只处理一个请求。服务器处理完客户端的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。在日常生活中可以认为普通邮件(是Mail,非Email)是无连接的,而打电话是有连接的。当发送邮件的时候,虽然信封上有收件人的地址和邮编,但是邮件有无收到,不通过其他方式,是不可能知道的,所以无连接的通信是不可靠的;而打电话是有连接的,正常情况包括拨号,应答和挂断,如果对方正在通话显示忙音,如果对方不在现场则显示无人应答,所以有连接的通信是可靠的。
HTTP协议是无连接的,这是由于早期HTTP 协议产生的时候,服务器需要同时处理面向全世界数十万、甚至上百万个客户端的网页访问,但是每个浏览器与服务器之间交换的间歇性是比较大的,并且网页浏览的发散性导致了两次传送的数据关联性是很低的,大部分的通道实际上会很空闲、无端占用资源,所以HTTP的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,即面向无连接的,以尽快将资源释放出来服务给其他客户端。
但是随着时间的推移,网页变得越来越复杂,网页里面有很多图片、视频等文件,这种情况和如果每次访问都需要建立一次TCP连接就显得很低效。因此,Keep-Alive在HTTP 1.1中被提出用来解决这个低效的问题。
Keep-Alive 可以使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive能够避免了建立或者重新建立连接。大部分Web 服务器,包括Django、IIS 和 Apache,都支持 HTTPKeep-Alive。对于提供静态内容的网站来说,这个功能通常是非常有用的。但是,对于负担较重的网站来说,这里存在另外一个问题,就是对性能的影响。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive功能对资源利用的影响尤其突出。
有了Keep-Alive,客户端和服务器之间的HTTP连接就会被保持,不会断开,当客户端发送另外一个请求时,就使用这条已经建立的连接。
图1-11是基于HTTP 1.0的页面请求。
(1)浏览器与WEB服务器建立连接。
(2)浏览器向WEB服务器发送HTTP网页1的请求。
(3)WEB服务器向浏览器返回网页1的响应消息。
(4)浏览器与WEB服务器断开连接。
(5)浏览器与WEB服务器建立连接。
(6)浏览器向WEB服务器发送图片1.1请求。
(7)WEB服务器向浏览器返回图片1.1的响应消息。
(8)浏览器与WEB服务器断开连接。
…
(n)浏览器与WEB服务器建立连接。
(n+1)浏览器向WEB服务器发送HTTP网页2的请求。
(n+2)WEB服务器向浏览器返回网页2的响应消息。
(n+3)浏览器与WEB服务器断开连接。
(n+4)浏览器与WEB服务器建立连接。
(n+5)浏览器向WEB服务器发送图片2.1请求。
(n+6)WEB服务器向浏览器返回图片2.1的响应消息。
(n+7)浏览器与WEB服务器断开连接。
…
图1-11基于HTTP 1.0的页面请求
图1-12是基于HTTP 1.1的页面请求,在这里加入了。HTTPKeep-Alive。
图1-12基于HTTP 1.0的页面请求
(1)浏览器与WEB服务器建立连接。
(2)浏览器向WEB服务器发送HTTP网页1的请求。
(3)WEB服务器向浏览器返回网页1的响应消息。
(4)浏览器向WEB服务器发送图片1.1请求。
(5)浏览器向WEB服务器发送图片1.2请求。
(6)浏览器向WEB服务器发送图片1.3请求。
(7)WEB服务器向浏览器返回图片1.1的响应消息。
(8)WEB服务器向浏览器返回图片1.2的响应消息。
(9)WEB服务器向浏览器返回图片1.3的响应消息。
(10)浏览器与WEB服务器断开连接。(注意:不同的HTML页面不能通过HTTPKeep-Alive保持连接。)
(11)浏览器与WEB服务器建立连接。
(12)浏览器向WEB服务器发送HTTP网页2的请求。
(13)WEB服务器向浏览器返回网页2的响应消息。
(14)浏览器向WEB服务器发送图片2.1请求。
(15)浏览器向WEB服务器发送图片2.2请求。
(16)WEB服务器向浏览器返回图片2.1的响应消息。
(17)WEB服务器向浏览器返回图片2.2的响应消息。
(18)浏览器与WEB服务器断开连接。