HTTP基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連接方式。HTTP允許傳輸任意類型的數據對象,HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。在客戶端發出HTTP請求並受到服務器端響應后,連接就會斷開,下次的訪問與前一次的訪問無關,因此如果需要維護客戶端的信息,必須在服務器端維持狀態數據。
一、HTTP URL的格式http://host[":"port][abs_path]
http表示要通過HTTP協議來定位網絡資源;
host表示合法的Internet主機域名或者IP地址;
port指定一個端口號,為空則使用缺省端口80;
abs_path指定請求資源的URI(如下圖中的查詢字符串);
如果URL中沒有給出abs_path,那么當它作為請求URI時,必須以“/”的形式給出,通常這個工作瀏覽器自動幫我們完成。
使用了默認端口80.
二、http請求由三部分組成,分別是:請求行、消息報頭、請求正文
請求行格式:Method Request-URI HTTP-Version CRLF
Method表示請求方法;
Request-URI是一個統一資源標識符;
HTTP-Version表示請求的HTTP協議版本;
CRLF表示回車和換行。
除了作為結尾的CRLF外,不允許出現單獨的CR或LF字符
請求方法(所有方法全為大寫),各個方法的解釋如下:
GET 請求獲取Request-URI所標識的資源
POST 在Request-URI所標識的資源后附加新的數據
HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭
PUT 請求服務器存儲一個資源,並用Request-URI作為其標識
DELETE 請求服務器刪除Request-URI所標識的資源
TRACE 請求服務器回送收到的請求信息,主要用於測試或診斷
CONNECT 保留將來使用
OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求
例子:
上圖中的空行是CRLF(回車換行)。
應用舉例:
GET方法:在瀏覽器的地址欄中輸入網址的方式訪問網頁時,瀏覽器采用GET方法向服務器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)
POST方法要求被請求服務器接受附在請求后面的數據,常用於提交表單。
eg:POST /reg.jsp HTTP/ (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
...
HOST:www.guet.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //該CRLF表示消息報頭已經結束,在此之前為消息報頭
user=jeffrey&pwd=1234 //此行以下為提交的數據
HEAD方法與GET方法幾乎是一樣的,對於HEAD請求的回應部分來說,它的HTTP頭部中包含的信息與通過GET請求所得到的信息是相同的。利用這個方法,不必傳輸整個資源內容,就可以得到Request-URI所標識的資源的信息。該方法常用於測試超鏈接的有效性,是否可以訪問,以及最近是否更新。
GET方法通常沒有消息主體,支持最大1024個字節的查詢字符串,POST方法沒有限制。POST方法把查詢字符串放在消息主體中傳輸,因此比GET方法支持更多的數據類型。
三、HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文
狀態行格式:HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version表示服務器HTTP協議的版本;
Status-Code表示服務器發回的響應狀態代碼;
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
Reason-Phrase表示狀態代碼的文本描述。
例子:
上圖中的空行是CRLF(回車換行)。
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,例如:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
原文:
wenku.baidu.com