HTTP報文是面向文本的,報文中的每個字段都是一些ASCII碼串,各個字段的長度是不肯定的。HTTP有兩類報文:請求報文和響應報文。html
一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成,下圖給出了請求報文的通常格式。瀏覽器
請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。例如,GET /index.html HTTP/1.1。服務器
HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。這裏介紹最經常使用的GET方法和POST方法。jsp
GET:當客戶端要從服務器中讀取文檔時,使用GET方法。GET方法要求服務器將URL定位的資源放在響應報文的數據部分,回送給客戶端。使用GET方法時,請求參數和對應的值附加在URL後面,利用一個問號(「?」)表明URL的結尾與請求參數的開始,傳遞參數長度受限制。例如,/index.jsp?id=100&op=bind。性能
POST:當客戶端給服務器提供信息較多時可使用POST方法。POST方法將請求參數封裝在HTTP請求數據中,以名稱/值的形式出現,能夠傳輸大量數據。測試
請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:spa
User-Agent:產生請求的瀏覽器類型。orm
Accept:客戶端可識別的內容類型列表。htm
Host:請求的主機名,容許多個域名同處一個IP地址,即虛擬主機。ip
最後一個請求頭以後是一個空行,發送回車符和換行符,通知服務器如下再也不有請求頭。
請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於須要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-Type和Content-Length。
HTTP請求由三部分組成,分別是:請求行、消息報頭、請求正文。
請求行以一個方法符號開頭,以空格分開,後面跟着請求的URI和協議的版本,格式以下:
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:請求查詢服務器的性能,或者查詢與資源相關的選項和需求。
方法名稱是區分大小寫的。當某個請求所針對的資源不支持對應的請求方法的時候,服務器應當返回狀態碼405(Method Not Allowed);當服務器不認識或者不支持對應的請求方法的時候,應當返回狀態碼501(Not Implemented)。HTTP服務器至少應該實現GET和HEAD方法,其餘方法都是可選的。固然,全部的方法支持的實現都應當符合下述方法各自的語義定義。此外,除了上述方法,特定的HTTP服務器還可以擴展自定義的方法。
應用舉例以下。
(1)GET方法:在瀏覽器的地址欄中輸入網址的方式訪問網頁時,瀏覽器採用GET方法向服務器獲取資源。
舉個例子:GET /form.html HTTP/1.1 (CRLF)
(2)POST方法:要求被請求服務器接受附在請求後面的數據,經常使用於提交表單。
舉個例子:POST /reg.jsp HTTP/ (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
..
HOST:www.nit.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //該CRLF表示消息
報頭已經結束,在此以前爲消息報頭
user=jeffrey&pwd=1234 //此行如下爲提交的數據
(3)HEAD方法:它與GET方法幾乎是同樣的,對於HEAD請求的迴應部分來講,它的HTTP頭部中包含的信息與經過GET請求所獲得的信息是相同的。利用這個方法,沒必要傳輸整個資源內容,就能夠獲得Request-URI所標識的資源的信息。該方法經常使用於測試超連接的有效性,是否能夠訪問,以及最近是否更新。
一個URL爲"http://test.com/ask.asp?name=liyang"的GET請求報文例子以下:
GET http://test.com/ask.asp?name=liyang HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: www.test.com
Connection: Keep-Alive
二、 HTTP響應報文
HTTP響應也由三個部分組成,分別是:狀態行、消息報頭、響應正文。
狀態行格式以下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。
1xx:指示信息--表示請求已接收,繼續處理。
2xx:成功--表示請求已被成功接收、理解、接受。
3xx:重定向--要完成請求必須進行更進一步的操做。
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現。
5xx:服務器端錯誤--服務器未能實現合法的請求。
常見狀態代碼、狀態描述的說明以下。
200 OK:客戶端請求成功。
400 Bad Request:客戶端請求有語法錯誤,不能被服務器所理解。
401 Unauthorized:請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用。
403 Forbidden:服務器收到請求,可是拒絕提供服務。
404 Not Found:請求資源不存在,舉個例子:輸入了錯誤的URL。
500 Internal Server Error:服務器發生不可預期的錯誤。
503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常,舉個例子:HTTP/1.1 200 OK(CRLF)。
一個請求URL爲"http://test.com/ask.asp?name=liyang "的應答報文例子以下:
HTTP/1.1 200 OK
Connection: keep-alive
Date: Thu, 26 Jul 2010 14:00:02 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 280
Content-Type: text/html
Set-Cookie: ASPSESSIONIDSAATTCSQ=JOPPKDCAMHHBEOICJPGPBJOB; path=/
Cache-control: private
<html>
<head>
<title>一網精深</title>
</head>
<body>
<b>HTTP響應報文<br></b>
<b>測試<br></b>
</body>
</html>