持久連接

????????一個web頁面上的大部分內(nèi)嵌圖片通常都來自一個Web站點许帐,而且其他對象的超鏈接都指向同一個站點没龙。因此链韭,初始化對某服務(wù)器(這個站點)HTTP請求的應(yīng)用程序可能會在不久的將來排霉,對這臺服務(wù)器發(fā)起更多的請求窍株。這種屬性被稱為站點局部性。

????????因此,HTTP1.1(HTTP1.0增加版本)允許HTTP設(shè)備在事務(wù)處理結(jié)束(下圖中有四個事務(wù))之后夹姥,將TCP連接保持打開的狀態(tài)杉武,以便為未來的HTTP請求重用現(xiàn)在的連接。

image.png

????????在事務(wù)處理結(jié)束之后仍保持打開狀態(tài)的TCP連接叫持久連接辙售,非持久連接會在每個事務(wù)結(jié)束之后關(guān)閉轻抱。持久連接會在不同事務(wù)之間保持打開狀態(tài),直到客戶端或服務(wù)器決定將其關(guān)閉為止旦部。

????????重用已對目標(biāo)服務(wù)器打開的空閑持久連接祈搜,就可以避免緩慢的連接建立階段。而已士八,已經(jīng)打開的連接可以避免慢啟動的擁塞和和適應(yīng)階段容燕,以便更快地進(jìn)行數(shù)據(jù)傳輸。

并行連接的缺點

  • 每個事務(wù)都會打開/關(guān)閉一個新的連接婚度,會耗費時間和帶寬蘸秘。
  • 由于TCP慢啟動特性的存在,每條新連接的性能都會有所降低蝗茁。
  • 可打開的并行連接數(shù)據(jù)實際上是有限的醋虏。

????????持久連接比并行連接更好的地方。持久連接降低了時延和連接建立的開銷哮翘,將連接保持在調(diào)諧狀態(tài)颈嚼,而且減少了打開連接的潛在數(shù)量。但持久連接的沒管理得當(dāng)饭寺,會累積出大量的空閑連接阻课,耗費本地以及遠(yuǎn)程客戶端和服務(wù)器上的資源。現(xiàn)在艰匙,好多Web應(yīng)用程序都會打開少量的并行連接限煞,其中每個都是持久連接。

持久連接類型
  • 比較老的HTTP/1.0+ Keep-alive
  • HTTP1.1 Presistent

HTTP/1.0+ Keep-alive連接

????????大約從1996年開始旬薯,很多支持HTTP/1.0瀏覽器和服務(wù)器進(jìn)行擴(kuò)展晰骑,以支持一種稱為Keep-alive的持久連接(實驗性)适秩。這些早期的持久連接存在操作性設(shè)計方面的缺陷绊序,在HTTP/1.1中得以修正,但很多客戶端和服務(wù)器仍使用早期的Keep-alive連接秽荞。

下面中顯示持久連接與串行連接的性能優(yōu)點骤公,由于去除了連接和關(guān)閉連接的開銷,所以時間線辰所縮減扬跋。也去掉慢啟動階段阶捆。

Keep-alive操作

????????Keep-alive已經(jīng)不再使用了,在當(dāng)前的HTTP/1.1規(guī)范中也沒有對它的說明。但很多瀏覽器和服務(wù)器對Keep-alive握手的使用仍然相當(dāng)廣泛洒试,因此倍奢,HTTP的實現(xiàn)者應(yīng)用做好與之操作的準(zhǔn)備。
????????實現(xiàn)HTTP/1.0+ Keep-alive連接的客戶端垒棋,需要在請求報文中加入一條(Connection: Keep-alive)頭部保持打開狀態(tài)(見下圖)卒煞。如果服務(wù)器愿意為下一條請求保持打開狀態(tài),會在響應(yīng)報文中包含相同的頭部叼架。如果響應(yīng)報文中沒有這條頭部畔裕,客戶端就認(rèn)為服務(wù)器不支持Keep-alive,會在發(fā)回(或不發(fā)回)響應(yīng)報文之后乖订,關(guān)閉連接扮饶。

image.png

Keep-alive選項

????????Keep-alive首部是請求將連接保持持久狀態(tài)。發(fā)出有Keep-alive首部的報文之后乍构,客戶端或服務(wù)器不一定同意進(jìn)行Keep-alive會話甜无。即將雙方同意,也可以在任意時刻關(guān)閉空閑的Keep-alive連接哥遮,并可隨意限制Keep-alive連接所處理的事務(wù)的數(shù)量毫蚓。
Keep-alive選項:

  • Timeout:是在Keep-alive響應(yīng)報文首部發(fā)送的,它估計了服務(wù)器希望將連接保持在活躍狀態(tài)時間昔善。這不是一個承諾值元潘。
  • Max:是在Keep-alive響應(yīng)報文首部發(fā)送的,它估計了服務(wù)器還希望為多少個事務(wù)保持此連接的活躍狀態(tài)君仆。這不是一個承諾值翩概。
  • name [=value]: Keep-alive首部也支持任意未處理的屬性,這些屬性主要用于診斷和調(diào)度
    Keep-alive首部是可選的返咱,只有在提供了Connection: Keep-alive時才能使用它钥庇。

下面代碼顯示這個服務(wù)器最多為另外5個事務(wù)保持連接的打開狀態(tài),或者將打開狀態(tài)保持到連接空閑2分鐘之后咖摹。

Connection; Keep-alive
Keep-alive: max=5, timeout=120

Keep-alive連接的限制和規(guī)則

  • 在HTTP/1.0中评姨,Keep-alive不是默認(rèn)使用的,在客戶端請求中必須發(fā)送一個Connection: Keep-alive首部來激活Keep-alive連接萤晴。
  • 如果客戶端的請求報文中沒有Connection: Keep-alive吐句,服務(wù)器會在這個請求之后,關(guān)閉這個連接店读。
  • 如果服務(wù)器響應(yīng)報文中沒有Connection: Keep-alive嗦枢,客戶端會在這個響應(yīng)之后,關(guān)閉這個連接屯断。
  • 保持持久連接的條件:報文實體的主體部分必須有正確的Content-Length文虏。如果錯誤的Content-Length值侣诺,將是一件糟糕的事情,事務(wù)處理的另一端無法精確地檢測出一條報文結(jié)束和另一條報文的開始氧秘。
  • 重要:應(yīng)該忽略所有來自HTTP/1.0設(shè)備的Connection首部字段年鸳,因為它們可能是由比較老的代理服務(wù)器誤轉(zhuǎn)發(fā)的。如果不忽略的話丸相,會產(chǎn)生啞代理問題阻星。
    在檢測到HTTP/1.0協(xié)議,并有Connection首部字段時已添,代理和網(wǎng)關(guān)必須在將報文轉(zhuǎn)發(fā)出去或?qū)⑵渚彺嬷巴谆瑒h除在Connection首部中命名的所有的首部字段,以及Connection本身(在服務(wù)器端也可以做限制)更舞。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畦幢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缆蝉,更是在濱河造成了極大的恐慌宇葱,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刊头,死亡現(xiàn)場離奇詭異黍瞧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)原杂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進(jìn)店門印颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人穿肄,你說我怎么就攤上這事年局。” “怎么了咸产?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵矢否,是天一觀的道長。 經(jīng)常有香客問我脑溢,道長僵朗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任屑彻,我火速辦了婚禮验庙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酱酬。我一直安慰自己壶谒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布膳沽。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挑社。 梳的紋絲不亂的頭發(fā)上陨界,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天,我揣著相機(jī)與錄音痛阻,去河邊找鬼菌瘪。 笑死,一個胖子當(dāng)著我的面吹牛阱当,可吹牛的內(nèi)容都是我干的俏扩。 我是一名探鬼主播,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼弊添,長吁一口氣:“原來是場噩夢啊……” “哼录淡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起油坝,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤嫉戚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后澈圈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彬檀,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年瞬女,在試婚紗的時候發(fā)現(xiàn)自己被綠了窍帝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡诽偷,死狀恐怖盯桦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渤刃,我是刑警寧澤拥峦,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站卖子,受9級特大地震影響略号,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洋闽,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一玄柠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诫舅,春花似錦羽利、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娃闲。三九已至,卻和暖如春匾浪,著一層夾襖步出監(jiān)牢的瞬間皇帮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工蛋辈, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留属拾,地道東北人。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓冷溶,卻偏偏與公主長得像渐白,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逞频,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內(nèi)容