HTTP1.0 、1.1
網上有很多資料說明這個,但都很長的,覺得東西太多也記不住,就記點東西,權當筆記。
HTTP
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。
HTTP報文由從客戶機到服務器的請求和從服務器到客戶機的響應構成。
請求報文格式如下:
請求行 - 請求頭 - 請求包體
請求行:請求行由URL字段、方法字段 和HTTP協議版本字段3個部分組成,之間用空格隔開。
請求頭:請求頭包含關於客戶端請求的信息,由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。
請求包體:請求包體不在GET方法中使用,而是在POST方法中使用(提交表單)。與請求包體相關的最常使用的是包體類型 Content-Type 和包體長度 Content-Length。
應答報文格式如下:
狀態行 - 響應頭 - 響應包體
狀態行:狀態行由HTTP協議版本字段、狀態碼和狀態碼的描述文本3個部分組成,之間用空格隔開。
響應頭:響應頭包含服務端的響應信息,由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。
響應包體:服務器返回給客戶端的文本信息。
HTTP1.0
HTTP 協議老的標準是HTTP/1.0,HTTP 1.0規定瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都需要與服務器建立一個TCP連接,服務器完成請求處理後立即斷開TCP連接,服務器不跟蹤每個客戶也不記錄過去的請求。
這樣每次請求和響應都需要建立一個單獨的連接,每次連接只是傳輸一個資源,上一次和下一次請求完全分離。客戶端和服務器端每次建立和關閉連接卻是一個相對比較費時的過程,並且會嚴重影響客戶機和服務器的性能。
http1.0被抱怨最多的就是連接無法復用,和head of line blocking這兩個問題。客戶端是依據域名來向服務器建立連接,一般PC端瀏覽器會針對單個域名的server同時建立6~8個連接,手機端的連接數則一般控制在4~6個。顯然連接數並不是越多越好,資源開銷和整體延遲都會隨之增大。連接無法復用會導致每次請求都經歷三次握手和慢啟動。三次握手在高延遲的場景下影響較明顯,慢啟動則對文件類大請求影響較大。head of line blocking會導致帶寬無法被充分利用,以及後續健康請求被阻塞。
HTTP1.1
為了克服HTTP 1.0的這個缺陷,HTTP 1.1支持持久連接(HTTP/1.1的默認模式使用帶流水線的持久連接),在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲。多個請求和應答可以在一個連接中傳輸,但每個單獨的網頁文件的請求和應答仍然需要使用各自的連接。HTTP 1.1還允許客戶端不用等待上一次請求結果返回,就可以發出下一次請求,但服務器端必須按照接收到客戶端請求的先後順序依次回送響應結果,以保證客戶端能夠區分出每次請求的響應內容,這樣也顯著地減少了整個下載過程所需要的時間。
HTTP 1.1通過增加更多的請求頭和響應頭來改進和擴充HTTP 1.0的功能。
HTTP 1.1中增加Host請求頭字段後,WEB瀏覽器可以使用主機頭名來明確表示要訪問服務器上的哪個WEB站點,這才實現了在一臺WEB服務器上可以在同一個IP地址和端口號上使用不同的主機名來創建多個虛擬WEB站點。
HTTP 1.1的持續連接,也需要增加新的請求頭來幫助實現,例如,Connection請求頭的值為Keep-Alive時,客戶端通知服務器返回本次請求結果後保持連接;Connection請求頭的值為close時,客戶端通知服務器返回本次請求結果後關閉連接。
HTTP 1.1還提供了與身份認證、狀態管理和Cache緩存等機制相關的請求頭和響應頭。
HTTP/1.0不支持文件斷點續傳,RANGE:bytes是HTTP/1.1新增內容,HTTP/1.0每次傳送文件都是從文件頭開始,即0字節處開始。RANGE:bytes=XXXX表示要求服務器從文件XXXX字節處開始傳送,這就是我們平時所說的斷點續傳!
1.0與1.1區別
HTTP/1.1相較於 HTTP/1.0 協議的區別主要體現在:
1 緩存處理
2 帶寬優化及網絡連接的使用
3 錯誤通知的管理
4 消息在網絡中的發送
5 互聯網地址的維護
6 安全性及完整性
參考文獻
1. http://www.jianshu.com/p/52d86558ca57 【面試時如何優雅的談論HTTP/1.0/1.1/2.0】
HTTP1.0 、1.1