HTTP1.1与HTTP1.0的区别
1 可擴展性
a) HTTP/1.1 在消息中增加版本號,用于兼容性判斷。 b) HTTP/1.1增加了OPTIONS方法,它允許客戶端獲取一個服務器支持的方法列表。 c) 為了與未來的協議規范兼容,HTTP/1.1在請求消息中包含了Upgrade頭域,通過該頭域,客戶端可以讓服務器知道它能夠支持的其它備用通信協議,服務器可以據此進行協議切換,使用備用協議與客戶端進行通信。
2 緩存
在 HTTP/1.0 中,使用 Expire 頭域來判斷資源的 fresh 或 stale,并使用條件請求(conditional request)來判斷資源是否仍有效。HTTP/1.1 在 1.0 的基礎上加入了一些 cache 的新特性,當緩存對象的 Age 超過 Expire 時變為stale對象,cache不需要直接拋棄stale對象,而是與源服務器進行重新激活(revalidation)。
3 帶寬優化
HTTP/1.0中,存在一些浪費帶寬的現象,例如客戶端只是需要某個對象的一部分,而服務器卻將整個對象送過來了。例如,客戶端只需要顯示一個文檔的部分內容,又比如下載大文件時需要支持斷點續傳功能,而不是在發生斷連后不得不重新下載完整的包。 HTTP/1.1中在請求消息中引入了range頭域,它允許只請求資源的某個部分。在響應消息中Content-Range頭 域聲明了返回的這部分對象的偏移值和長度。如果服務器相應地返回了對象所請求范圍的內容,則響應碼為 206(Partial Content),它可以防止Cache將響應誤以為是完整的一個對象。 另外一種情況是請求消息中如果包含比較大的實體內容,但不確定服務器是否能夠接收該請求(如是否有權限),此時若貿然發出帶實體的請求,如果被拒絕也會浪費帶寬。 HTTP/1.1 加入了一個新的狀態碼 100(Continue)。客戶端事先發送一個只帶頭域的請求,如果服務器因為權限拒絕了請求,就回送響應碼401(Unauthorized);如果服務器接收此請求就回送響應碼100,客戶端就可以繼續發送帶實體的完整請求了。注意,HTTP/1.0的客戶端不支持100響應碼。但可以讓客戶端在請求消息中加入Expect頭域,并將它的值設置為100-continue。 節省帶寬資源的一個非常有效的做法就是壓縮要傳送的數據。Content-Encoding是對消息進行端到端(end-to-end)的編碼,它可能是資源在服務器上保存的固有格式(如jpeg圖片格式);在請求消息中加入Accept-Encoding頭域,它可以告訴服務器客戶端能夠解碼的編碼方式。
4 長連接
HTTP/1.0 規定瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都需要與服務器建立一個 TCP 連接,服務器完成請求處理后立即斷開TCP連接,服務器不跟蹤每個客戶也不記錄過去的請求。此外,由于大多數網頁的流量都比較小,一次TCP連接很少能通過slow-start區,不利于提高帶寬利用率。 HTTP 1.1支持長連接(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連接上可以傳送多個 HTTP 請求和響應,減少了建立和關閉連接的消耗和延遲。例如:一個包含有許多圖像的網頁文件的多個請求和應答可以在一個連接中傳輸,但每個單獨的網頁文件的請求和應答仍然需要使用各自的連接。 HTTP 1.1還允許客戶端不用等待上一次請求結果返回,就可以發出下一次請求,但服務器端必須按照接收到客戶端請求的先后順序依次回送響應結果,以保證客戶端能夠區分出每次請求的響應內容,這樣也顯著地減少了整個下載過程所需要的時間。
5 消息傳遞
HTTP消息中可以包含任意長度的實體,通常它們使用Content-Length來給出消息結束標志。但是,對于很多動態產生的響應,只能通過緩沖完整的消息來判斷消息的大小,但這樣做會加大延遲。如果不使用長連接,還可以通過連接關閉的信號來判定一個消息的結束。 HTTP/1.1 中引入了 Chunkedtransfer-coding 來解決上面這個問題,發送方將消息分割成若干個任意大小的數據塊,每個數據塊在發送時都會附上塊的長度,最后用一個零長度的塊作為消息結束的標志。這種方法允許發送方只緩沖消息的一個片段,避免緩沖整個消息帶來的過載。 在 HTTP/1.0 中,有一個 Content-MD5 的頭域,要計算這個頭域需要發送方緩沖完整個消息后才能進行。而 HTTP/1.1 中,采用 chunked 分塊傳遞的消息在最后一個塊(零長度)結束之后會再傳遞一個拖尾trailer),它包含一個或多個頭域,這些頭域是發送方在傳遞完所有塊之后再計算出值的。發送方會在消息中包含一個Trailer頭域告訴接收方這個拖尾的存在。
6 Host頭域
在HTTP1.0中認為每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL并沒有傳遞主機名(hostname)。 但隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),并且它們共享一個IP地址。 HTTP1.1 的請求消息和響應消息都應支持 Host 頭域,且請求消息中如果沒有 Host 頭域會報告一個錯誤(400 Bad Request)。此外,服務器應該接受以絕對路徑標記的資源請求。
7 錯誤提示
HTTP/1.0 中只定義了 16 個狀態響應碼,對錯誤或警告的提示不夠具體。HTTP/1.1 引入了一個 Warning 頭域,增加對錯誤或警告信息的描述。 此外,在HTTP/1.1中新增了24個狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生沖突; 410(Gone)表示服務器上的某個資源被永久性的刪除。
總結
以上是生活随笔為你收集整理的HTTP1.1与HTTP1.0的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx全局内存缓存
- 下一篇: session共享怎么做的(分布式如何实