第6篇:HTTP/1.x中的連接管理

HTTP中的連接管理是一個(gè)關(guān)鍵性話題,持久的打開連接極大的影響著網(wǎng)站和web應(yīng)用的性能带污,在HTTP/1.x中体箕,有這么幾種模型:short-lived 連接,persistent 連接和HTTP pipelining杈笔。
HTTP 極大的依賴于TCP協(xié)議闪水,HTTP 初期只使用short-lived模式處理連接:每次請(qǐng)求創(chuàng)建一個(gè)連接,響應(yīng)結(jié)束則關(guān)閉連接蒙具。

這種簡(jiǎn)陋的模式在性能上天生就有缺陷:每打開一個(gè)TCP連接都是一個(gè)耗費(fèi)資源的操作球榆,網(wǎng)絡(luò)延遲和帶寬限制都會(huì)影響性能朽肥;而現(xiàn)在的許多web頁面獲取完整的信息需要發(fā)送十幾個(gè)請(qǐng)求,這證明早期的模型是無效的芜果。

在HTTP/1.1有兩種新模型鞠呈;持久連接(persistent-connection)模式可以保持請(qǐng)求成功了的連接一直處于打開狀態(tài),從而減少了建立連接的開銷右钾。管道連接(pipelining)模式更進(jìn)一步蚁吝,可以連續(xù)發(fā)送幾個(gè)請(qǐng)求,這些請(qǐng)求甚至不需要等待服務(wù)器的響應(yīng)舀射,可參考下圖:

  • image.png

HTTP/2 使用特有的連接管理模式

需要指出的是:http的連接管理是針對(duì)兩個(gè)連續(xù)的逐跳(hop-by-hop)節(jié)點(diǎn)窘茁,非端到端(end-to-end);客戶端和第一代理之間使用的連接模式可能取決于第二或第三代理和目標(biāo)服務(wù)器之間的連接模式脆烟。HTTP headers可以定義使用哪種連接模式山林,比如ConnectionKeep-Alive,它們屬于hop-by-hop headers 邢羔,同時(shí)可以被中間節(jié)點(diǎn)改變驼抹。

另一個(gè)相關(guān)的話題是HTTP連接的升級(jí),在HTTP/1.1中使用的是如TLS/1.0拜鹤、WebSocket框冀、甚至協(xié)議進(jìn)行升級(jí),更多可參考 協(xié)議升級(jí)機(jī)制敏簿;

短連接 Short-lived connections

HTTP的最初模型明也,甚至HTTP/1.0都是短連接模式,每個(gè)HTTP請(qǐng)求都是在它自己的連接上完成的惯裕,這意味著每個(gè)請(qǐng)求都需要三次握手温数,并且它們都是竄行(非并行)的。三次握手本身就需要耗費(fèi)時(shí)間蜻势,但是TCP連接適應(yīng)了這種負(fù)載撑刺,并且變得越來越高效和持久。TCP的特性本身不適用于短連接咙边,當(dāng)建立新的連接來持久傳輸會(huì)降低性能猜煮。
在HTTP/1.0中默認(rèn)使用這種模式(如果沒有指定Connection header,或沒有設(shè)定為close). 在HTTP/1.1中败许,只有當(dāng)Connectionheader設(shè)置為close才會(huì)啟用短連接王带。
除非處理一個(gè)不支持持久連接的舊系統(tǒng),否則沒有可以令人信服的理由使用這個(gè)模型市殷。

持久連接 Persistent connections

短連接有兩個(gè)主要的障礙:花費(fèi)在建立新連接的時(shí)間巨多愕撰;只有當(dāng)TCP連接被用于暖連接時(shí)性能才會(huì)變得更好。為了解決這兩個(gè)問題,持久連接誕生了搞挣,甚至在HTTP/1.1之前就有這個(gè)概念带迟,持戒連接也被稱為keep-alive連接。

持久連接可以被重復(fù)利用很多次囱桨,可以節(jié)省重復(fù)建立TCP的時(shí)間仓犬,最大化的優(yōu)化其性能。但是持久連接并不是說永遠(yuǎn)都處于打開的狀態(tài):服務(wù)端可以利用 Keep-Alive 請(qǐng)求頭指定一個(gè)最小打開時(shí)間舍肠;

但持久連接也是有缺陷的搀继,甚至當(dāng)空轉(zhuǎn)的時(shí)候,也消耗服務(wù)端的資源于負(fù)荷翠语,DoS attacks攻擊能夠利用這個(gè)缺陷叽躯。在這種情況下,非持久連接就更高效了肌括,一旦連接是空閑的点骑,就立刻關(guān)閉。

HTTP/1.0中使用的并非持久連接谍夭,將Connection 設(shè)置為非 close, 然后使用retry-after, 可以達(dá)到持久的目的黑滴;在HTTP/1.1中,默認(rèn)使用持久連接紧索,并且不用請(qǐng)求頭指定(but it is often added as a defensive measure against cases requiring a fallback to HTTP/1.0)跷跪;

流水線 HTTP pipelining

流水線模式在現(xiàn)在的瀏覽器中是沒有被激活的:

  • 小車代理(Buggy proxies)仍然很常見并且導(dǎo)致web開發(fā)者不能預(yù)見很診斷一些奇奇怪怪的問題。
  • 流水線模式要正確應(yīng)用起來是很復(fù)雜的:大量的資源需要傳輸齐板,RTT要高效實(shí)用,還有極速的帶寬葛菇,這些因素對(duì)該模式有直接的影響甘磨。不了解這些,恐怕使會(huì)得重要的消息被丟失眯停。因此該模式在大多數(shù)情況下只帶來了微小的改進(jìn)济舆;
  • 該模式是 HOL 難題的主題。

基于以上理由莺债,該模式被HTTP/2中更好的算法和方案所取代滋觉。

所以默認(rèn)情況下,HTTP請(qǐng)求是有序的發(fā)送齐邦,下一個(gè)HTTP請(qǐng)求的發(fā)送要基于上一個(gè)請(qǐng)求已被響應(yīng)椎侠。由于網(wǎng)絡(luò)延遲和帶寬限制,這將導(dǎo)致請(qǐng)求的重大延遲措拇。

HTTP Pipelining 是在持久連接的基礎(chǔ)上可異步的發(fā)送請(qǐng)求我纪,這避免了連接的延遲,理論上,如果兩個(gè)HTTP請(qǐng)求包裹在同一個(gè)TCP消息管道中浅悉,性能將會(huì)得到很大的提升趟据。典型的MSS (Maximum Segment Size),可以攜帶若干個(gè)簡(jiǎn)單的HTTP請(qǐng)求术健,盡管HTTP請(qǐng)求數(shù)量的需求在不斷的增長汹碱。

并非所有類型的HTTP請(qǐng)求都可以使用該模式:只有idempotent方法,如 GET, HEAD, PUT and DELETE方法荞估,可以安全的被處理咳促。

如今,盡管現(xiàn)在大多數(shù)瀏覽器默認(rèn)不啟用該模式泼舱,但每一個(gè)HTTP/1.1-compliant代理和服務(wù)端都支持該模式等缀;

域分片 Domain sharding

注意:除非你有一個(gè)非常急迫的需求,不要使用這種技術(shù)娇昙,不如使用HTTP/2協(xié)議尺迂。在In HTTP/2中域分片更有效:HTTP/2的連接可以很好的處理并行請(qǐng)求,域分片甚至對(duì)性能是有害的冒掌。大部分的HTTP / 2的實(shí)現(xiàn)使用了一種叫做connection coalescing 的技術(shù)使用域分片噪裕。

在HTTP/1.x協(xié)議中,請(qǐng)求是串行化的股毫,甚至是無序的膳音,其性能很大程度上依賴于帶寬;為了解決這個(gè)問題铃诬,瀏覽器為每個(gè)域名打開幾個(gè)連接祭陷,發(fā)送并行的請(qǐng)求。默認(rèn)情況下一次是2到3個(gè)連接趣席,但是現(xiàn)在增加到了6個(gè)并行的連接兵志。如果超過這個(gè)數(shù)字,就會(huì)觸發(fā)服務(wù)端對(duì)DoS防御保護(hù)宣肚;

為了提升網(wǎng)站的性能想罕,服務(wù)器有可能強(qiáng)制打開更多連接. 比如分離出多個(gè)域名, www1.example.com, www2.example.com, www3.example.com霉涨,而不是將所有資源都放在一個(gè)域名下www.example.com按价;每個(gè)域名解析同一個(gè)服務(wù)器,然后瀏覽器為每個(gè)域名打開6個(gè)連接(在我們的例子中笙瑟,將連接數(shù)提升到了18)楼镐。這種技術(shù)就叫做域分片。

image.png
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末往枷,一起剝皮案震驚了整個(gè)濱河市鸠蚪,隨后出現(xiàn)的幾起案子今阳,更是在濱河造成了極大的恐慌,老刑警劉巖茅信,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盾舌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蘸鲸,警方通過查閱死者的電腦和手機(jī)妖谴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酌摇,“玉大人膝舅,你說我怎么就攤上這事∫ざ啵” “怎么了仍稀?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長埂息。 經(jīng)常有香客問我技潘,道長,這世上最難降的妖魔是什么千康? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任享幽,我火速辦了婚禮,結(jié)果婚禮上拾弃,老公的妹妹穿的比我還像新娘值桩。我一直安慰自己,他們只是感情好豪椿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布奔坟。 她就那樣靜靜地躺著,像睡著了一般搭盾。 火紅的嫁衣襯著肌膚如雪蛀蜜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天增蹭,我揣著相機(jī)與錄音,去河邊找鬼磅摹。 笑死滋迈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的户誓。 我是一名探鬼主播饼灿,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼帝美!你這毒婦竟也來了碍彭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庇忌,沒想到半個(gè)月后舞箍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皆疹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年疏橄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片略就。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捎迫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出表牢,到底是詐尸還是另有隱情窄绒,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布崔兴,位于F島的核電站彰导,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏恼布。R本人自食惡果不足惜螺戳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望折汞。 院中可真熱鬧倔幼,春花似錦、人聲如沸爽待。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸟款。三九已至膏燃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間何什,已是汗流浹背组哩。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留处渣,地道東北人伶贰。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像罐栈,于是被迫代替她去往敵國和親黍衙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

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

  • 試想一下荠诬,一個(gè)科班出身琅翻,擁有豐富開發(fā)經(jīng)驗(yàn)的程序員對(duì)于HTTP協(xié)議卻不甚了解位仁?還是很尷尬的!這么一個(gè)可以說是常識(shí)的問...
    一個(gè)人在路上走下去閱讀 91,766評(píng)論 18 189
  • 連接管理 重點(diǎn) http是如何使用tcp連接的方椎; tcp連接的時(shí)延聂抢、瓶頸以及存在的障礙 http的優(yōu)化包括并行連接...
    shenyifu閱讀 786評(píng)論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)辩尊,斷路器涛浙,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 轉(zhuǎn)載于:http://mrpeak.cn/blog/http2/ HTTP 2.0的那些事 在我們所處的互聯(lián)網(wǎng)世界...
    柒黍閱讀 2,358評(píng)論 0 8
  • 圣家族大教堂(加泰羅尼亞語:Basílica i Temple Expiatori de la Sagrada F...
    Flick閱讀 687評(píng)論 4 6