一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成,下圖給出了請求報文的一般格式。
(1)請求行
請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。例如,GET /index.html HTTP/1.1。
HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。這里介紹最常用的GET方法和POST方法。
GET:當客戶端要從服務器中讀取文檔時,使用GET方法。GET方法要求服務器將URL定位的資源放在響應報文的數據部分,回送給客戶端。使用GET方法時,請求參數和對應的值附加在URL后面,利用一個問號(“?”)代表URL的結尾與請求參數的開始,傳遞參數長度受限制。例如,/index.jsp?id=100&op=bind。
POST:當客戶端給服務器提供信息較多時可以使用POST方法。POST方法將請求參數封裝在HTTP請求數據中,以名稱/值的形式出現,可以傳輸大量數據。
(2)請求頭部
請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。請求頭部通知服務器有關于客戶端請求的信息,典型的請求頭有:
User-Agent:產生請求的瀏覽器類型。
Accept:客戶端可識別的內容類型列表。
Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。
(3)空行
最后一個請求頭之后是一個空行,發送回車符和換行符,通知服務器以下不再有請求頭。
(4)請求數據
請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用于需要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-Type和Content-Length。
2, 詳解
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請求報文例子如下:
GEThttp://test.com/ask.asp?name=liyangHTTP/1.1
Accept:*/*
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;
WindowsNT5.1;SV1;.NETCLR2.0.50727)
Host:www.test.com
Connection:Keep-Alive
2、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.1200OK
Connection:keep-alive
Date:Thu,26Jul201014:00:02GMT
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>
更多關于云服務器,域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn