1. 程式人生 > >HTTP1.0和HTTP1.1的區別

HTTP1.0和HTTP1.1的區別

project med -s 允許 它的 頁面 報告 實體 host

區別一、HTTP 1.0只支持短連接而HTTP 1.1支持持久連接

HTTP 1.0規定瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都需要與服務器建立一個TCP連接,服務器完成請求處理後立即斷開TCP連接,服務器不跟蹤每個客戶也不記錄過去的請求。

一個WEB站點每天可能要接收到上百萬的用戶請求,為了提高系統的效率,HTTP 1.0規定瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都需要與服務器建立一個TCP連接,服務器完成請求處理後立即斷開TCP連接,服務器不跟蹤每個客戶也不記錄過去的請求。但是,這也造成了一些性能上的缺陷,例如,一個包含有許多圖像的網頁文件中並沒有包含真正的圖像數據內容,而只是指明了這些圖像的URL地址,當WEB瀏覽器訪問這個網頁文件時,瀏覽器首先要發出針對該網頁文件的請求,當瀏覽器解析WEB服務器返回的該網頁文檔中的HTML內容時,發現其中的<img>圖像標簽後,瀏覽器將根據<img>標簽中的src屬性所指定的URL地址再次向服務器發出下載圖像數據的請求,如下圖所示:

技術分享

顯然,訪問一個包含有許多圖像的網頁文件的整個過程包含了多次請求和響應,每次請求和響應都需要建立一個單獨的連接,每次連接只是傳輸一個文檔和圖像,上一次和下一次請求完全分離。即使圖像文件都很小,但是客戶端和服務器端每次建立和關閉連接卻是一個相對比較費時的過程,並且會嚴重影響客戶機和服務器的性能。當一個網頁文件中包含Applet,JavaScript文件,CSS文件等內容時,也會出現類似上述的情況。

為了克服HTTP 1.0的這個缺陷,HTTP 1.1支持持久連接,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲。一個包含有許多圖像的網頁文件的多個請求和應答可以在一個連接中傳輸,但每個單獨的網頁文件的請求和應答仍然需要使用各自的連接。

技術分享

HTTP 1.1的持久連接,也需要增加新的請求頭來幫助實現,例如,Connection請求頭(HTTP 1.1新增的)的值為Keep-Alive時,客戶端通知服務器返回本次請求結果後保持連接;Connection請求頭的值為close時,客戶端通知服務器返回本次請求結果後關閉連接。

HTTP/1.1 協議的持久連接有兩種方式:

非流水線方式:客戶在收到前一個響應後才能發出下一個請求;

流水線方式:客戶在收到 HTTP 的響應報文之前就能接著發送新的請求報文,但服務器端必須按照接收到客戶端請求的先後順序依次回送響應結果,以保證客戶端能夠區分出每次請求的響應內容;

區別二、HTTP 1.1增加host字段

在HTTP1.0中認為每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。

HTTP1.1在Request消息頭裏頭多了一個Host域,比如:

GET /pub/WWW/TheProject.html HTTP/1.1

Host: www.w3.org

HTTP1.0則沒有這個域。

可能HTTP1.0的時候認為,建立TCP連接的時候已經指定了IP地址,這個IP地址上只有一個host。

由於HTTP 1.0不支持Host請求頭字段,WEB瀏覽器無法使用主機頭名來明確表示要訪問服務器上的哪個WEB站點,這樣就無法使用WEB服務器在同一個IP地址和端口號上配置多個虛擬WEB站點。在HTTP 1.1中增加Host請求頭字段後,WEB瀏覽器可以使用主機頭名來明確表示要訪問服務器上的哪個WEB站點,這才實現了在一臺WEB服務器上可以在同一個IP地址和端口號上使用不同的主機名來創建多個虛擬WEB站點。

HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。此外,服務器應該接受以絕對路徑標記的資源請求。

區別三、100(Continue) Status(節約帶寬)

存在一種浪費帶寬的情況是請求消息中如果包含比較大的實體內容,但不確定服務器是否能夠接收該請求(如是否有權限),此時若貿然發出帶實體的請求,如果被拒絕也會浪費帶寬。

HTTP/1.1加入了一個新的狀態碼100(Continue)。客戶端事先發送一個只帶頭域的請求,如果服務器因為權限拒絕了請求,就回送響應碼401(Unauthorized);如果服務器接收此請求就回送響應碼100(Continue),客戶端就可以繼續發送帶實體的完整請求了。註意,HTTP/1.0的客戶端不支持100響應碼。但可以讓客戶端在請求消息中加入Expect頭域,並將它的值設置為100-continue。

100 (Continue) 狀態代碼的使用,允許客戶端在發request消息body之前先用request header試探一下server,看server要不要接收request body,再決定要不要發request body。

客戶端在Request頭部中包含

Expect: 100-continue

Server看到之後呢如果回100 (Continue) 這個狀態代碼,客戶端就繼續發requestbody。

這個是HTTP1.1才有的。

區別四、 增加Request方法

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

GET    請求指定的頁面信息,並返回實體主體。

HEAD    類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭

POST    向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。

PUT    從客戶端向服務器傳送的數據取代指定的文檔的內容。

DELETE   請求服務器刪除指定的頁面。

CONNECT   HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。

OPTIONS   允許客戶端查看服務器的性能。

TRACE   回顯服務器收到的請求,主要用於測試或診斷。

HTTP1.0和HTTP1.1的區別