1、背景
KeepAlive是就是通常所稱的長連接。KeepAlive帶來的好處是可以減少tcp連接的開銷,這對於短response body的請求效果更加明顯。同時,可以為采用HTTP協議的交互式應用提供良好的session支持。
2、KeepAlive的原理
在HTTP1.0和HTTP1.1協議中都有對KeepAlive的支持。其中HTTP1.0需要在request中增加”Connection: keep-alive“ header才能夠支持,而HTTP1.1默認支持。
HTTP1.0 KeepAlive支持的數據交互流程如下:
a) Client發出request,其中該request的HTTP版本號為1.0。同時在request中包含一個header:”Connection: keep-alive“。
b) Web Server收到request中的HTTP協議為1.0及”Connection: keep-alive“就認為是一個長連接請求,其將在response的header中也增加”Connection: keep-alive“。同時不會關閉已建立的tcp連接。
c) Client收到Web Server的response中包含”Connection: keep-alive“,就認為是一個長連接,不close tcp連接。並用該tcp連接再發送request。(跳轉到a))
HTTP1.1 KeepAlive支持的數據交互流程如下:
a) Client發出request,其中該request的HTTP版本號為1.1。
b) Web Server收到request中的HTTP協議為1.1就認為是一個長連接請求,其將在response的header中也增加”Connection: keep-alive“。同是不會關閉已建立的tcp連接。
c) Client收到Web Server的response中包含”Connection: keep-alive“,就認為是一個長連接,不close tcp連接。並用該tcp連接再發送request。(跳轉到a))
抓包查看:
GET /myweb/login.jsp HTTP/1.1
Cookie: JSESSIONID=77FC1A52E9C3BAD0536359386A96C0FB
x-requested-with: XMLHttpRequest
Accept-Language: zh-cn
Referer: https://192.168.0.0:8443//myweb/login.jsp
Accept: */*
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Host: 192.168.0.0:8443
Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)
HTTP/1.1 200 OK
Content-Length: 0
Server: Apache-Coyote/1.1
Cache-Control: no-store,no-cache
Cache-Control: no-store,no-cache
Date: Mon, 17 Jun 2013 07:53:31 GMT