從 HTTP1.x 到 HTTP 2.0 變遷

前言

互聯(lián)網(wǎng)世界中,HTTP協(xié)議算是使用最廣泛的協(xié)議。最近Http2.0誕生再次使得互聯(lián)網(wǎng)技術(shù)成為關(guān)注的焦點(diǎn)淌实。接下來我們一起看看關(guān)于HTTP的那些事。

HTTP

說道HTTP難免會提及TCP協(xié)議越败,HTTP是建立在TCP協(xié)議之上的触幼,TCP協(xié)議作為傳輸層協(xié)議其實(shí)離應(yīng)用層并不遠(yuǎn)。

TCP協(xié)議的性能直接影響了HTTP:

  • TCP建立連接時(shí)需要三次握手1.5個(gè)RTT
  • 慢啟動(slow start)

目前究飞,影響網(wǎng)路請求的兩個(gè)主要因素: 帶寬和延遲置谦。隨著網(wǎng)絡(luò)基礎(chǔ)設(shè)施建設(shè)帶寬得到極大提升堂鲤,大部分是延遲在影響響應(yīng)速度。
HTTP 1.0 最大問題:

  • 連接無法復(fù)用
  • head-of-line blocking (隊(duì)頭阻塞)

連接無法復(fù)用會導(dǎo)致每次都需要進(jìn)行三次握手和慢啟動媒峡。

head-of-line blocking 則會導(dǎo)致帶寬無法充分利用瘟栖,以及后續(xù)健康請求阻塞。

解決連接無法復(fù)用問題

在HTTP 1.0協(xié)議里設(shè)置Connection: Keep-Alive谅阿“胗矗可以在一定時(shí)間內(nèi)復(fù)用連接。對于PC端瀏覽器來說效果明顯签餐,對移動APP來說成效不大寓涨。

方案一: 基于TCP的長鏈接

基于TCP協(xié)議,使用TCP的Socket編程技術(shù)氯檐。 成熟方案如:Google的protobuf戒良。
缺點(diǎn):實(shí)現(xiàn)難度大,需要自己制定協(xié)議冠摄。
有點(diǎn):信息的上報(bào)和推送變及時(shí)糯崎,減輕服務(wù)器壓力。

方案二: http long-polling

客戶端在初始狀態(tài)就會發(fā)送一個(gè)polling請求到服務(wù)器河泳,服務(wù)器并不會馬上返回業(yè)務(wù)數(shù)據(jù)沃呢,而是等待有新的業(yè)務(wù)數(shù)據(jù)產(chǎn)生的時(shí)候再返回。
難度:鏈接增多會增加服務(wù)器壓力乔询,移動網(wǎng)絡(luò)不穩(wěn)定需要考慮重建鏈接樟插,穩(wěn)定性不好,需要業(yè)務(wù)數(shù)據(jù)過期機(jī)制竿刁。

方案三: http streaming

同long-polling不同的是黄锤,server并不會結(jié)束初始的streaming請求,而是持續(xù)的通過這個(gè)通道返回最新的業(yè)務(wù)數(shù)據(jù)食拜。

方案四:web socket

優(yōu)點(diǎn):雙向的數(shù)據(jù)通道鸵熟,提供了http所缺少的長連接功能。
缺點(diǎn):較新负甸,大部分瀏覽器不支持流强。

head-of-line blocking

http pipelining
缺點(diǎn):只適用于http1.1,絕大部分http代理服務(wù)器不支持等

其他技術(shù)

  • Spriting (圖片合并)
  • Inlining (內(nèi)容內(nèi)嵌)
  • Concatenation (文件合并)
  • Domain Sharding (域名分片)

SPDY

為了解決http1.0和1.1存在的問題呻待,Google在2012年提出了SPDY方案打月。

目標(biāo):

  • 降低延遲,客戶單的單鏈接單請求蚕捉,server的FIFO響應(yīng)隊(duì)列都是延遲的大頭奏篙。
  • http 最初是客戶端發(fā)請求,服務(wù)器響應(yīng),服務(wù)器無法主動push內(nèi)容秘通。
  • 壓縮http header为严。

SPDY設(shè)計(jì):

位于HTTP之下,TCP和SSL之上肺稀,兼容老版本第股,還可以使用已有的SSL功能。SPDY分為基礎(chǔ)功能和高級功能话原,基礎(chǔ)功能默認(rèn)開啟夕吻,高級功能手動開啟。

基礎(chǔ)功能

  • 多路復(fù)用(multiplexing)稿静。多路復(fù)用通過多個(gè)請求stream共享一個(gè)tcp連接的方式梭冠。解決了隊(duì)頭阻塞,降低了延遲提高帶寬利用率改备。
  • 請求優(yōu)先級(request prioritization)控漠。在多路復(fù)用的時(shí)候會出現(xiàn)關(guān)鍵請求被阻塞。SPDY 允許每次request設(shè)置優(yōu)先級悬钳。
  • header壓縮盐捷。壓縮率達(dá)到80%以上。

高級功能

  • server推送(server push) 默勾。開啟server push 之后碉渡,服務(wù)器通過X-Associated-Content header告知客戶端有新內(nèi)容推送過來。
  • server暗示(server hint) 母剥。不推送滞诺,只提示有新內(nèi)容。

HTTP 2.0

SPDY的誕生和表現(xiàn)說明了兩件事:

  • 一是現(xiàn)有互聯(lián)網(wǎng)設(shè)施基礎(chǔ)和http協(xié)議廣泛使用的前提下环疼,可以通過修改協(xié)議層來優(yōu)化http1.x习霹。
  • 針對http1.x的修改業(yè)界反饋很好

優(yōu)點(diǎn): 多路復(fù)用,請求壓縮炫隶,優(yōu)先級控制淋叶,server push等亮點(diǎn)。

HTTP2.0主要改動

  1. 新的二進(jìn)制格式
    http1.x誕生的時(shí)候使用明文協(xié)議伪阶,三部分組成:start line, header, body煞檩。協(xié)議解析,基于文本的栅贴,基于文本的協(xié)議解析存在缺陷斟湃,需要考慮的場景很多。

    http2.0 采用二進(jìn)制格式檐薯,實(shí)現(xiàn)方便且健壯桐早。http2.0的格式定義更接近tcp層的方式。

    • length:定義了整個(gè)frame的開始到結(jié)束。
    • type:定義frame的類型(一共10種)
    • flags: 用bit位定義一些重要的參數(shù)
    • stream ID 用作流控制
    • payload: request的正文
  2. 連接共享(多路復(fù)用)

    使用上面提到的Stream id用來作連接共享機(jī)制的哄酝。一個(gè)request對應(yīng)一個(gè)stream并分配一個(gè)id,接收方可以根據(jù)id區(qū)分frame歸屬哪個(gè)不同的frame祷膳√招疲可以調(diào)整優(yōu)先級,并且可以動態(tài)調(diào)整直晨。

  3. header壓縮

  4. 重置連接表現(xiàn)更好

  5. Server Push

    http2.0能通過push方式將客戶端需要的內(nèi)容預(yù)先推送出去搀军,所以也叫“cache push”.

  6. 流量控制(Flow control)

  7. 更安全的SSL

移動端的HTTP現(xiàn)狀

iOS下http現(xiàn)狀

iOS系統(tǒng)從iOS8開始通過NSURLSession來支持SPDY,在iOS9+開始支持HTTP2.0.新版本的ATS默認(rèn)支持https進(jìn)行網(wǎng)絡(luò)傳輸勇皇。

Android下HTTP現(xiàn)狀

http2.0只能在新系統(tǒng)中支持罩句,SPDY作為過渡方案存在。

結(jié)束

HTTP1.x到SPDY敛摘,再到HTTP2.0的一些主要變遷技術(shù)點(diǎn)门烂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兄淫,隨后出現(xiàn)的幾起案子屯远,更是在濱河造成了極大的恐慌,老刑警劉巖捕虽,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慨丐,死亡現(xiàn)場離奇詭異,居然都是意外死亡泄私,警方通過查閱死者的電腦和手機(jī)房揭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晌端,“玉大人捅暴,你說我怎么就攤上這事≌端桑” “怎么了伶唯?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惧盹。 經(jīng)常有香客問我乳幸,道長,這世上最難降的妖魔是什么钧椰? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任粹断,我火速辦了婚禮,結(jié)果婚禮上嫡霞,老公的妹妹穿的比我還像新娘瓶埋。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布养筒。 她就那樣靜靜地躺著曾撤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晕粪。 梳的紋絲不亂的頭發(fā)上挤悉,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音巫湘,去河邊找鬼装悲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尚氛,可吹牛的內(nèi)容都是我干的诀诊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阅嘶,長吁一口氣:“原來是場噩夢啊……” “哼属瓣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奈懒,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奠涌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后磷杏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溜畅,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年极祸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慈格。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遥金,死狀恐怖浴捆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稿械,我是刑警寧澤选泻,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站美莫,受9級特大地震影響页眯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厢呵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一窝撵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧襟铭,春花似錦碌奉、人聲如沸短曾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫉拐。三九已至,卻和暖如春魁兼,著一層夾襖步出監(jiān)牢的瞬間椭岩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工璃赡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人献雅。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓碉考,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挺身。 傳聞我的和親對象是個(gè)殘疾皇子侯谁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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