HTTP1.0與HTTP1.1的區別

來源:互聯網
上載者:User

標籤:物理   技術   類型   路徑   tco   優先   tran   分割   中文版   

下面主要從幾個不同的方面介紹HTTP/1.0與HTTP/1.1之間的差別,當然,更多的內容是放在解釋這種差異背後的機制上。1 可擴充性

可擴充性的一個重要原則:如果HTTP的某個實現接收到了自身未定義的頭域,將自動忽略它。

?  在訊息中增加版本號碼,用於相容性判斷。注意,版本號碼只能用來判斷逐段(hop-by-hop)的相容性,而無法判斷端到端(end-to-end)的相容性。
例如,一台HTTP/1.1的原始伺服器從使用HTTP/1.1的Proxy那兒接收到一條轉寄的訊息,實際上原始伺服器並不知道終端客戶使用的是HTTP/1.0還是HTTP/1.1。因此,HTTP/1.1定義Via頭域,用來記錄訊息轉寄的路徑,它記錄了整個路徑上所有發送方使用的版本號碼。

?  HTTP/1.1增加了OPTIONS方法,它允許用戶端擷取一個伺服器支援的方法列表。

?  為了與未來的協議規範相容,HTTP/1.1在請求訊息中包含了Upgrade頭域,通過該頭域,用戶端可以讓伺服器知道它能夠支援的其它備用通訊協定,伺服器可以據此進行協議切換,使用備用協議與用戶端進行通訊。

2 緩衝

在HTTP/1.0中,使用Expire頭域來判斷資源的fresh或stale,並使用條件請求(conditional request)來判斷資源是否仍有效。例如,cache伺服器通過If-Modified-Since頭域向伺服器驗證資源的Last-Modefied頭域是否有更新,原始伺服器可能返回304(Not Modified),則表明該對象仍有效;也可能返回200(OK)替換請求的Cache對象。

此外,HTTP/1.0中還定義了Pragma:no-cache頭域,用戶端使用該頭域說明請求資源不能從cache中擷取,而必須回源擷取。

HTTP/1.1在1.0的基礎上加入了一些cache的新特性,當緩衝對象的Age超過Expire時變為stale對象,cache不需要直接拋棄stale對象,而是與原始伺服器進行重新啟用(revalidation)。

HTTP/1.0中,If-Modified-Since頭域使用的是絕對時間戳記,精確到秒,但使用絕對時間會帶來不同機器上的時鐘同步問題。而HTTP/1.1中引入了一個ETag頭域用於重啟用機制,它的值entity tag可以用來唯一的描述一個資源。請求訊息中可以使用If-None-Match頭域來匹配資源的entitytag是否有變化。

為了使caching機制更加靈活,HTTP/1.1增加了Cache-Control頭域(請求訊息和響應訊息都可使用),它支援一個可擴充的指令子集:例如max-age指令支援相對時間戳記;private和no-store指令禁止對象被緩衝;no-transform阻止Proxy進行任何改變響應的行為。

Cache使用關鍵字索引在磁碟中緩衝的對象,在HTTP/1.0中使用資源的URL作為關鍵字。但可能存在不同的資源基於同一個URL的情況,要區別它們還需要用戶端提供更多的資訊,如Accept-Language和Accept-Charset頭域。為了支援這種內容協商機制(content negotiation mechanism),HTTP/1.1在響應訊息中引入了Vary頭域,該頭域列出了請求訊息中需要包含哪些頭域用於內容協商。

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頭域,它可以告訴伺服器用戶端能夠解碼的編碼方式。

而Transfer-Encoding是逐段式(hop-by-hop)的編碼,如Chunked編碼。在請求訊息中加入TE頭域用來告訴伺服器能夠接收的transfer-coding方式,

4 長串連

HTTP 1.0規定瀏覽器與伺服器只保持短暫的串連,瀏覽器的每次請求都需要與伺服器建立一個TCP串連,伺服器完成請求處理後立即斷開TCP串連,伺服器不跟蹤每個客戶也不記錄過去的請求。此外,由於大多數網頁的流量都比較小,一次TCP串連很少能通過slow-start區,不利於提高頻寬利用率。

HTTP 1.1支援長串連(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP串連上可以傳送多個HTTP請求和響應,減少了建立和關閉串連的消耗和延遲。例如:一個包含有許多映像的網頁檔案的多個請求和應答可以在一個串連中傳輸,但每個單獨的網頁檔案的請求和應答仍然需要使用各自的串連。

HTTP 1.1還允許用戶端不用等待上一次請求結果返回,就可以發出下一次請求,但伺服器端必須按照接收到用戶端請求的先後順序依次回送響應結果,以保證用戶端能夠區分出每次請求的響應內容,這樣也顯著地減少了整個下載過程所需要的時間。

在HTTP/1.0中,要建立長串連,可以在請求訊息中包含Connection: Keep-Alive頭域,如果伺服器願意維持這條串連,在響應訊息中也會包含一個Connection: Keep-Alive的頭域。同時,可以加入一些指令描述該長串連的屬性,如max,timeout等。

事實上,Connection頭域可以攜帶三種不同類型的符號:

1、一個包含若干個頭網域名稱的列表,聲明僅限於一次hop串連的頭域資訊;

2、任意值,本次串連的非標準選項,如Keep-Alive等;

3、close值,表示訊息傳送完成之後關閉長串連;

 

用戶端和原始伺服器之間的訊息傳遞可能要經過很多中間節點的轉寄,這是一種逐跳傳遞(hop-by-hop)。HTTP/1.1相應地引入了hop-by-hop頭域,這種頭域僅作用於一次hop,而非整個傳遞路徑。每一個中間節點(如Proxy,Gateway)接收到的訊息中如果包含Connection頭域,會尋找Connection頭域中的一個頭網域名稱列表,並在將訊息轉寄給下一個節點之前先刪除訊息中這些頭域。

通常,HTTP/1.0的Proxy不支援Connection頭域,為了不讓它們轉寄可能誤導接收者的頭域,協議規定所有出現在Connection頭域中的頭網域名稱都將被忽略。

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)表示伺服器上的某個資源被永久性的刪除。

8 內容協商

為了滿足互連網使用不同母語和字元集的使用者,一些網路資源有不同的語言版本(如中文版、英文版)。HTTP/1.0定義了內容協商(contentnegotiation)的概念,也就是說用戶端可以告訴伺服器自己可以接收以何種語言(或字元集)表示的資源。例如如果伺服器不能明確用戶端需要何種類型的資源,會返回300(Multiple Choices),並包含一個列表,用來聲明該資源的不同可用版本,然後用戶端在請求訊息中包含Accept-Language和Accept-Charset頭域指定需要的版本。

就像有些人會說幾門外語,但每種外語的流利程度並不相同。類似地,網路資源也可以有不同的表達形式,比如有母語版和各種翻譯版本。HTTP引入了一個品質因子(quality values)的概念來表示不同版本的可用性,它的取值從0.0到1.0。例如一個母語是英語的人也能講法語、甚至還學了點丹麥語,那麼他的瀏覽器可用作如下配置:Accept-Language: en, fr;q=0.5, da;q=0.1。這時,伺服器會優先選取品質因子高的值對應的資源版本作為響應。

 

HTTP1.0與HTTP1.1的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.