HTTP 0.9、1.0、1.1、2.0、3.0


先說下http的幾個版本區別:

轉載於:https://www.cnblogs.com/hanxuming/p/8026206.html

HTTP/0.9
    1990年問世,那時的HTTP並沒有作為正式的標准被建立,這時的HTTP其實含有HTTP/1.0之前版本的意思,那時候還有嚴重設計缺陷,只支持GET方法,很快被HTTP/1.0取代。
    並且協議還規定,服務器只能回應HTML格式的字符串,不能回應別的格式,當服務器發送完畢,就關閉TCP連接。
HTTP/1.0

    [特點]
    1、任何格式的內容都可以發送。這使得互聯網不僅可以傳輸文字,還能傳輸圖像、視頻、二進制文件。這為互聯網的大發展奠定了基礎。
    2、除了GET命令,還引入了POST命令和HEAD命令,豐富了瀏覽器與服務器的互動手段。
    3、HTTP請求和回應的格式也變了。除了數據部分,每次通信都必須包括頭信息(HTTP header),用來描述一些元數據。
    4、其他的新增功能還包括狀態碼(status code)、多字符集支持、多部分發送(multi-part type)、權限(authorization)、緩存(cache)、內容編碼(content encoding)等。
    [不足]
    HTTP/1.0 版的主要缺點是,每個TCP連接只能發送一個請求。發送數據完畢,連接就關閉,如果還要請求其他資源,就必須再新建一個連接。TCP連接的新建成本很高,因為需要客戶端和服務器三次握手,並且開始時發送速率較慢(slow start)。所以,HTTP 1.0版本的性能比較差。隨着網頁加載的外部資源越來越多,這個問題就愈發突出了。

HTTP/1.1


    [特點]
    1、引入了持久連接(persistent connection),即TCP連接默認不關閉,可以被多個請求復用,不用聲明Connection: keep-alive。客戶端和服務器發現對方一段時間沒有活動,就可以主動關閉連接。不過,規范的做法是,客戶端在最后一個請求時,發送Connection: close,明確要求服務器關閉TCP連接
    2、引入了管道機制(pipelining),即在同一個TCP連接里面,客戶端可以同時發送多個請求。這樣就進一步改進了HTTP協議的效率。舉例來說,客戶端需要請求兩個資源。以前的做法是,在同一個TCP連接里面,先發送A請求,然后等待服務器做出回應,收到后再發出B請求。管道機制則是允許瀏覽器同時發出A請求和B請求,但是服務器還是按照順序,先回應A請求,完成后再回應B請求。
    3、將Content-length字段的作用進行擴充,即聲明本次回應的數據長度(一個TCP連接現在可以傳送多個回應,勢必就要有一種機制,區分數據包是屬於哪一個回應的)
    4、采用分塊傳輸編碼,對於一些很耗時的動態操作,服務器需要等到所有操作完成,才能發送數據,顯然這樣的效率不高。更好的處理方法是,產生一塊數據,就發送一塊,采用"流模式"(stream)取代"緩存模式"(buffer)
    5、1.1版還新增了許多動詞方法:PUT、PATCH、HEAD、 OPTIONS、DELETE。另外,客戶端請求的頭信息新增了Host字段,用來指定服務器的域名
    [不足]

    雖然1.1版允許復用TCP連接,但是同一個TCP連接里面,所有的數據通信是按次序進行的。服務器只有處理完一個回應,才會進行下一個回應。要是前面的回應特別慢,后面就會有許多請求排隊等着。這稱為"隊頭堵塞"(Head-of-line blocking)。為了避免這個問題,只有兩種方法:一是減少請求數,二是同時多開持久連接。這導致了很多的網頁優化技巧,比如合並腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等等。如果HTTP協議設計得更好一些,這些額外的工作是可以避免的。

 

HTTP2.0:

轉載於:https://segmentfault.com/a/1190000016656529

 

引言

秋招來臨,在面試過程中不僅會問到前端知識、算法問題,網絡相關的內容也會多少涉及,被問的最多的就是“你了解HTTP2.0嗎?”由於這個問題並不能很完美的回答出來,因此特地查閱了相關資料、博客,最終整理出一份通俗易懂的HTTP2.0入門文章,也算是學習筆記,希望能給看到該文章的你帶來一些收獲。

什么是HTTP2.0

想要了解一個事物,首先就要知道它是什么。

簡單來說,HTTP/2(超文本傳輸協議第2版,最初命名為HTTP2.0),是HTTP協議的第二個主要版本。HTTP/2是HTTP協議自1999年HTTP1.1發布后的首個更新,主要基於SPDY協議。
HTTP2.0的特點是:在不改動HTTP語義、方法、狀態碼、URI及首部字段的情況下,大幅度提高了web性能。

什么是SPDY協議

剛剛對HTTP2.0的介紹中引出了一個名詞 —— SPDY協議,這又是什么呢?

SPDY是Speedy的昵音,意為“更快”。它是Google開發的基於TCP協議的應用層協議。目標是優化HTTP協議的性能,通過壓縮、多路復用和優先級等技術,縮短網頁的加載時間並提高安全性。SPDY協議的核心思想是盡量減少TCP連接數。SPDY並不是一種用於替代HTTP的協議,而是對HTTP協議的增強。

HTTP1.x的缺點

任何事物的更新都是為了彌補或修復上個版本的某些問題,那么我們來看看HTTP1.x都有哪些缺點以至於我們要使用HTTP2.0。

HTTP1.x有以下幾個主要缺點:

  1. HTTP/1.0一次只允許在一個TCP連接上發起一個請求,HTTP/1.1使用的流水線技術也只能部分處理請求並發,仍然會存在隊列頭阻塞問題,因此客戶端在需要發起多次請求時,通常會采用建立多連接來減少延遲。
  2. 單向請求,只能由客戶端發起。
  3. 請求報文與響應報文首部信息冗余量大。
  4. 數據未壓縮,導致數據的傳輸量大。

我們可以通過一個鏈接來對比一下HTTP2.0到底比HTTP1.x快了多少。鏈接地址

HTTP2.0特點

通過以上內容,你應該已經對HTTP2.0有了初步認識,並且了解了HTTP1.x的缺點。那么下面我們就來了解一下HTTP2.0的特點。

二進制傳輸

HTTP2.0中所有加強性能的核心是二進制傳輸,在HTTP1.x中,我們是通過文本的方式傳輸數據。基於文本的方式傳輸數據存在很多缺陷,文本的表現形式有多樣性,因此要做到健壯性考慮的場景必然有很多,但是二進制則不同,只有0和1的組合,因此選擇了二進制傳輸,實現方便且健壯。
在HTTP2.0中引入了新的編碼機制,所有傳輸的數據都會被分割,並采用二進制格式編碼。
圖片描述
為了保證HTTP不受影響,那就需要在應用層(HTTP2.0)和傳輸層(TCP or UDP)之間增加一個二進制分幀層。在二進制分幀層上,HTTP2.0會將所有傳輸的信息分為更小的消息和幀,並采用二進制格式編碼,其中HTTP1.x的首部信息會被封裝到Headers幀,而Request Body則封裝到Data幀。

多路復用

在HTTP1.0中,我們經常會使用到雪碧圖、使用多個域名等方式來進行優化,都是因為瀏覽器限制了同一個域名下的請求數量,當頁面需要請求很多資源的時候,隊頭阻塞(Head of line blocking)會導致在達到最大請求時,資源需要等待其他資源請求完成后才能繼續發送。
HTTP2.0中,有兩個概念非常重要:幀(frame)和流(stream)。
幀是最小的數據單位,每個幀會標識出該幀屬於哪個流,流是多個幀組成的數據流。
所謂多路復用,即在一個TCP連接中存在多個流,即可以同時發送多個請求,對端可以通過幀中的表示知道該幀屬於哪個請求。在客戶端,這些幀亂序發送,到對端后再根據每個幀首部的流標識符重新組裝。通過該技術,可以避免HTTP舊版本的隊頭阻塞問題,極大提高傳輸性能。
圖片描述

Header壓縮

在HTTP1.0中,我們使用文本的形式傳輸header,在header中攜帶cookie的話,每次都需要重復傳輸幾百到幾千的字節,這着實是一筆不小的開銷。
在HTTP2.0中,我們使用了HPACK(HTTP2頭部壓縮算法)壓縮格式對傳輸的header進行編碼,減少了header的大小。並在兩端維護了索引表,用於記錄出現過的header,后面在傳輸過程中就可以傳輸已經記錄過的header的鍵名,對端收到數據后就可以通過鍵名找到對應的值。

服務器Push

在HTTP2.0中,服務端可以在客戶端某個請求后,主動推送其他資源。
可以想象一下,某些資源客戶端是一定會請求的,這時就可以采取服務端push的技術,提前給客戶端推送必要的資源,就可以相對減少一點延遲時間。在瀏覽器兼容的情況下也可以使用prefetch。

更安全

HTTP2.0使用了tls的拓展ALPN做為協議升級,除此之外,HTTP2.0對tls的安全性做了近一步加強,通過黑名單機制禁用了幾百種不再安全的加密算法。

 

HTTP3.0:

谷歌開發的QUIC協議,利用UDP實現可靠數據傳輸。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM