超文本傳輸協議 (HTTP-Hypertext transfer protocol) 是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。
HTTP/0.9
只接受GET一種請求方法,沒有在通訊中指定版本號,且不支持請求頭。由於該版本不支持POST方法,因此客戶端無法向服務器傳遞太多信息。
HTTP/1.0
這是第一個在通訊中指定版本號的HTTP協議版本,至今仍被廣泛採用,特別是在代理服務器中。
HTTP/1.1
當前版本。持久連接被默認採用,並能很好地配合代理服務器工作。還支持以管道方式在同時發送多個請求,以便降低線路負載,提高傳輸速度。
HTTP/1.0與HTTP/1.1的區別:
Persistent Connection(持久連接)
HTTP1.0中,每對Request/Response都使用一個新的連接。
HTTP 1.1則支持Persistent Connection,並且默認使用persistent connection.
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響應報文格式: