(1)連接方面
HTTP1.0使用非持久連接,即在非持久連接下,一個tcp連接只傳輸一個Web對象。每次請求和響應都需要建立一個單獨的連接,每次連接只是傳輸一個對象,嚴重影響客戶機和服務器的性能。
HTTP1.1默認使用持久連接(然而,HTTP/1.1協議的客戶機和服務器可以配置成使用非持久連接)在持久連接下,不必為每個Web對象的傳送建立一個新的連接,一個連接中可以傳輸多個對象。在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲。HTTP 1.1的持續連接,也需要增加新的請求頭來幫助實現,例如,Connection請求頭的值為Keep-Alive時,客戶端通知服務器返回本次請求結果后保持連接;Connection請求頭的值為close時,客戶端通知服務器返回本次請求結果后關閉連接。HTTP 1.1還提供了與身份認證、狀態管理和Cache緩存等機制相關的請求頭和響應頭。
(2)緩存方面
HTTP1.0中主要使用header里的If-Modified-Since,Expires來做為緩存判斷的標准
HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略帶寬優化及網絡連接的使用
(3)狀態碼
在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生沖突;410(Gone)表示服務器上的某個資源被永久性的刪除
(4)帶寬優化
HTTP 1.1支持只發送header信息(不帶任何body信息),如果服務器認為客戶端有權限請求服務器,則返回100,否則返回401。客戶端如果接收到100,才開始把請求body發送到服務器。
這樣當服務器返回401的時候,客戶端就可以不用發送請求body了,節約了帶寬。
(5)Host頭
HTTP1.0中認為每台服務器都綁定一個唯一的IP地址,因此,請求消息中的URL並沒有傳遞主機名(hostname)。但隨着虛擬主機技術的發展,在一台物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。
HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。
HTTP1.1 VS HTTP2.0
(1)多路復用:
在HTTP/1.1協議中,瀏覽器客戶端在同一時間針對同一域名的請求有一定數據限制。超過限制數目的請求會被阻塞。
HTTP2.0使用了多路復用的技術,做到同一個連接並發處理多個請求,而且並發請求的數量比HTTP1.1大了好幾個數量級。
當然HTTP1.1也可以多建立幾個TCP連接,來支持處理更多並發的請求,但是創建TCP連接本身也是有開銷的。
TCP連接有一個預熱和保護的過程,先檢查數據是否傳送成功,一旦成功過,則慢慢加大傳輸速度。因此對應瞬時並發的連接,服務器的響應就會變慢。所以最好能使用一個建立好的連接,並且這個連接可以支持瞬時並發的請求。
(2)首部壓縮:
HTTP1.1不支持header數據的壓縮,HTTP2.0使用HPACK算法對header的數據進行壓縮,這樣數據體積小了,在網絡上傳輸就會更快。
(3)服務器推送:
當我們對支持HTTP2.0的web server請求數據的時候,服務器會順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創建連接發送請求到服務器端獲取。這種方式非常合適加載靜態資源。