HTTP協議各個版本的介紹和特點

    超文本傳輸協議 (HTTP-Hypertext transfer protocol) 是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。

HTTP/0.9

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

HTTP/1.0

這是第一個在通訊中指定版本號的HTTP協議版本,至今仍被廣泛採用,特別是在代理服務器中。

HTTP/1.1

當前版本。持久連接被默認採用,並能很好地配合代理服務器工作。還支持以管道方式在同時發送多個請求,以便降低線路負載,提高傳輸速度。



HTTP/1.0與HTTP/1.1的區別:


  1. Persistent Connection(持久連接)

    HTTP1.0中,每對Request/Response都使用一個新的連接。

    HTTP 1.1則支持Persistent Connection,並且默認使用persistent connection.

  2. Host域

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

    GET /index HTTP/1.1

    Host: www.fesxp.com

    HTTP1.0 則沒有這個域,建立TCP連接的時候已經指定了IP地址。

    HTTP1.0 默認一個IP地址只對應一個主機名,IP地址上只有一個host。

    帶寬優化:

       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方式。

    請求方法和狀態碼上的增加:

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

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

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

    內容協商:

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


狀態碼:


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

100(continue)繼續發送

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

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

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

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


HTTP請求報文格式:

GET / HTTP/1.1
Host: www.fesxp.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.33 (KHTML, like Gecko) Chrome/27.0.1438.7 Safari/537.33
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: PHPSESSID=e763b654190c7ec19321af078a22063a

HTTP響應報文格式:

  1. HTTP/1.1 200 OK
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Length: 13672
    Content-Type: text/html
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Server: Microsoft-IIS/7.0
    X-Powered-By: PHP/5.2.6
    X-Powered-By: ASP.NET
    Date: Fri, 17 May 2013 02:38:23 GMT
    Connection: close




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章