HTTP(HyperText Transfer Protocol,超文本輸傳協議)是用於從www(萬維網)服務器傳輸超文本到本地瀏覽器的傳送協議,它可以使瀏覽器更加高效,使用網絡傳減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以前哪部份內容首先顯示(如文本先於圖形)等。目前,HTTP協議有兩個版本:HTTP1.0和HTTP1.1。
HTTP是應用層協議,是建立在TCP協議基礎之上的(TCP是一個底層協議)。HTTP協議是一個基於“請求/響應”模式的、無狀態的協議。
HTTP消息內容
瀏覽器和WEB服務器之間會通過HTTP在Internet上進行數據的發送和接收,這些數據也被稱爲HTTP消息(Message)。HTTP消息可以是客戶端到服務器的請求消息,也可是的服務器到客戶端的響應消息。
請求消息與響應消息都是由開始行、消息報頭(可選)、空行(只有CRLF的行)、消息正文(可選)組成的。
message = start-line
*message-header
CRLF
[message-body]
HTTP消息由開始行(start-line)、消息報頭(message-header)、消息正文(message-body)3部分構成。
對於請求或者響應,開始行有所不同。對於請求消息,“開始行”就是請求行(request-line);對於響應消息,“開始行”就是狀態行(status-line)。
start-line = request-line | status-line
“消息報頭”就是前面所說的請求和響應的HTTP消息報頭,“消息正文”就是HTML文檔或者圖片等文件,它們之間由一個空行隔開。
1.HTTP請求內容
客戶端通過發送HTTP請求向服務器請求對資源的訪問,這時,HTTP請求由下面的內容(HTTP消息)組成
message = request - Line
*message - header
CRLF
[message - body]
請求行
請求行(request - line)的結構如下:
Method request-URI HTTP-Version CRLF
Method:表示HTTP的請求方法,你如:GET、POST等,注意需要大寫
request-URI:表示統一資源標識符
HTTP-Version:表示請求的HTTP協議版本,HTTP/1.1 和 HTTP/1.0
CRLF:表示回車換行(實際上我們是無法閱讀出來的換行標誌)
HTTP請求方法
常見的HTTP請求的方法就是GET、POST、HEAD,當然也包括其它方法:
GET:通過請求地址獲得資源
HEAD:類似於GET,但是不返回正文信息,用於檢查對象是否存在,以及得到對象的元數據。
POST:通過添加新的內容進行請求資源
PUT:用於修改某個內容
DELETE:用於刪除某個內容
OPTIONS:詢問可以執行的有哪些方法
TRACE:用於遠程診斷服務器
2.HTTP響應內容
服務器到客戶端請求做出響應,這時,HTTP響應由下面的內容(HTTP消息)組成。
message = Status - Line
*message - header
CRLF
[message - body]
狀態行
狀態行(Stauts-Line)的結構如下:
HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version:表示請求的HTTP協議版本,HTTP/1.1 和 HTTP/1.0
Status-Code:表示服務器發回給客戶端的狀態代碼
Reason-Phrase:表示與狀態代碼相對應的簡短文字描述
CRLF:表示回車換行(實際上我們是無法閱讀出來的換行標誌)
狀態代碼
狀態代碼(Status-Code)由3位數字組成,表示請求是否被理解或被滿足。狀態代碼的第一個數字定義了響應的類別(範圍是1-5),後面兩位數字沒有代表任何具體的分類。
1XX:指示信息。表示請求已經收到,繼續處理
2XX:成功。表示請求已經被成功處理,並已經被理解和接受
3XX:重定向。表示請求已經收到,但必須採取進一步行動才能完成請求
4XX:客戶端錯誤。請求中包括了有錯誤的語法,或者不能被完成,或者資源不存在
5XX:服務器錯誤。服務器出現了異常情況,儘管請求是正確的
原因短語
原因短語(Reason-Phrase)使用短語簡單地說明了狀態代碼所要表達的意思。例如:
200:表示請求成功處理
206:表示使用了Range進行分段傳送
404:表示請求的資源沒有找到
500:表示服務器內部出現了異常情況