HTTP請求報文和響應報文

 

HTTP報文是面向文本的,報文中的每個字段都是一些ASCII碼串,各個字段的長度是不肯定的。HTTP有兩類報文:請求報文響應報文html

 

一、請求報文

    
    一個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方法。jsp

            GET:當客戶端要從服務器中讀取文檔時,使用GET方法。GET方法要求服務器將URL定位的資源放在響應報文的數據部分,回送給客戶端。使用GET方法時,請求參數和對應的值附加在URL後面,利用一個問號(「?」)表明URL的結尾與請求參數的開始,傳遞參數長度受限制。例如,/index.jsp?id=100&op=bind。性能

            POST:當客戶端給服務器提供信息較多時可使用POST方法。POST方法將請求參數封裝在HTTP請求數據中,以名稱/值的形式出現,能夠傳輸大量數據。測試

    (2)請求頭部

            請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:spa

            User-Agent:產生請求的瀏覽器類型。orm

            Accept:客戶端可識別的內容類型列表。htm

            Host:請求的主機名,容許多個域名同處一個IP地址,即虛擬主機。ip

    (3)空行

            最後一個請求頭以後是一個空行,發送回車符和換行符,通知服務器如下再也不有請求頭。

    (4)請求數據

            請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於須要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-TypeContent-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請求報文例子以下:

  1. GET http://test.com/ask.asp?name=liyang HTTP/1.1  

  2. Accept: */*  

  3. Accept-Language: zh-cn  

  4. Accept-Encoding: gzip, deflate  

  5. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;   

  6. Windows NT 5.1; SV1; .NET CLR 2.0.50727)  

  7. Host: www.test.com  

  8. 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 "的應答報文例子以下:

  1. HTTP/1.1 200 OK  

  2. Connection: keep-alive  

  3. Date: Thu, 26 Jul 2010 14:00:02 GMT  

  4. Server: Microsoft-IIS/6.0  

  5. X-Powered-By: ASP.NET  

  6. Content-Length: 280  

  7. Content-Type: text/html  

  8. Set-Cookie: ASPSESSIONIDSAATTCSQ=JOPPKDCAMHHBEOICJPGPBJOB; path=/  

  9. Cache-control: private  

  10. <html> 

  11. <head> 

  12. <title>一網精深</title> 

  13. </head> 

  14. <body> 

  15. <b>HTTP響應報文<br></b> 

  16. <b>測試<br></b> 

  17. </body> 

  18. </html> 

相關文章
相關標籤/搜索