1. 程式人生 > >HTTP各版本及區別

HTTP各版本及區別

HTTP(Hypertext transfer protocol)超文字傳輸協議,是一個應用層的通訊協議。

HTTP協議版本介紹:

HTTP/0.9 :只接受GET一種請求方法,沒有在通訊中指定版本號,且不支援請求頭。由於該版本不支援POST方法,因此客戶端無法向伺服器傳遞太多資訊。

HTTP/1.0 :第一個在通訊中指定的版本號,至今被廣泛採用,特別是在代理伺服器中。

HTTP/1.1 :當前版本號,持久連線被預設採用,並能很好地配合代理伺服器工作。還支援以管道方式在同時傳送多個請求,以便降低線路負載,提高傳輸速度。

HTTP/2.0 正在開發中······

HTTP/1.1與HTTP/1.0的區別:

1.persistent connection(持久連線)

HTTP/1.0中,每對請求/ 響應都使用一個新的連線。

HTTP/1.1則支援持久連線(預設)。

2.Host域

HTTP/1.1在請求訊息頭多一個Host域;HTTP/1.0  則沒有這個域,建立TCP連線的時候已經指定了IP地址,而且預設一個IP地址只對應一個主機名,IP地址上只有一個host。

3.頻寬優化

HTTP/1.1中在請求訊息中引入了range頭域,它允許只請求資源的某個部分。在響應訊息中Content-Range頭域聲明瞭返回的這部分物件 的偏移值和長度。如果伺服器相應地返回了物件所請求範圍的內容,則響應碼為206(Partial Content),它可以防止Cache將響應誤以為是完整的一個物件。請求訊息中如果包含比較大的實體內容,但不確定伺服器是否能夠接收該請求(如是否有許可權),此時若貿然發出帶實體的請求,如果被拒絕也會浪費頻寬。 HTTP/1.1加入了一個新的狀態碼100(Continue)。客戶端事先發送一個只帶頭域的請求,如果伺服器因為許可權拒絕了請求,就回送響應碼 401(Unauthorized);如果伺服器接收此請求就回送響應碼100,客戶端就可以繼續傳送帶實體的完整請求了。注意,HTTP/1.0的客戶 端不支援100響應碼。

    節省頻寬資源的一個非常有效的做法就是壓縮要傳送的資料。Content-Encoding是對訊息進行端到端(end-to-end)的編碼,它可能是 資源在伺服器上儲存的固有格式(如jpeg圖片格式);在請求訊息中加入Accept-Encoding頭域,它可以告訴伺服器客戶端能夠解碼的編碼方 式。而Transfer-Encoding是逐段式(hop-by-hop)的編碼,如Chunked編碼。在請求訊息中加入TE頭    域用來告訴伺服器能夠接收的transfer-coding方式。

4.請求方法和狀態碼

HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT這些Request方法

HTTP/1.0中只定義了16個狀態響應碼,對錯誤或警告的提示不夠具體。HTTP/1.1引入了一個Warning頭域,增加對錯誤或警告資訊的描述。

在HTTP/1.1中新增了24個狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示伺服器上的某個資源被永久性的刪除。

5.內容協商

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

6.狀態碼

100~199:資訊狀態碼,表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程

100(continue)繼續傳送

200~299:成功狀態碼,表示成功接收請求並已完成整個處理過程,常用200(OK)成功接收

300~399:重定向狀態碼,例如,請求的資源已經移動一個新地址,常用302、307和304

400~499:客戶端的請求有錯誤,常用404(Not Found),403(Fobidden)

500~599:伺服器端出現錯誤,常用 500