1. 程式人生 > >Http協議響應的解析

Http協議響應的解析

        在接受到一個請求後,伺服器會返回一個HTTP響應。HTTP響應由三部分構成,即狀態行,相應報頭和響應正文。

        1、狀態行

        狀態行由HTTP版本(HTTP-Version)、狀態碼(Status-Code)以及解釋狀態碼的簡單短語(Reason-phrase)三部分構成,請格式如下:

        HTTP-Version Status-Code Reason-phrase CRLF

        狀態碼由三位數字組成,共有5大類33種,其中第一個數字指定了響應型別,取值為1~5,後面兩位沒有具體的規定。

  • 1xx:指示資訊,如請求收到了或正在處理。
  • 2xx:成功。
  • 3xx:重定向。
  • 4xx:客戶端錯誤,如請求中含有錯誤的語法或不能正常完成。
  • 5xx:伺服器端錯誤,如伺服器失效而無法完成請求。

        例如:

  • 200:OK  成功
  • 304:Not Modified  未修改
  • 400:Bad Request  錯誤請求
  • 404:Not Found  未找到

        典型的響應狀態碼解釋如下:

  • 200:表示請求成功,成功返回了請求的資源。
  • 302/307:表示臨時重定向,此時請求的文件已經臨時移動到其他位置,該文件新的URL將在Location響應報頭中給出。
  • 401:表示瀏覽器訪問的是一個受到密碼保護的頁面。
  • 403:表示伺服器收到請求,但拒絕提供服務。
  • 404:表示找不到資源,即伺服器上不存在瀏覽器請求的資源。
  • 500:表示內部伺服器錯誤,即伺服器端的CGI、ASP、JSP等程式發生了錯誤。
  • 503:表示伺服器暫時性超載,不能處理當前的請求。

        狀態行舉例:

        HTTP 1.0 200 OK

        這是Web伺服器應答的第一行,列出伺服器正在執行的HTTP版本號和應答程式碼。程式碼''200 OK''表示請求完成。

        2、響應報頭

有了響應報頭伺服器就可以傳遞不能放在狀態行中的附加響應資訊,以及伺服器的資訊和對Request-URI所標識的資源進行下一步訪問資訊。

        常見的響應報頭如下:

  • Allow:指出伺服器所支援的請求方法,如GET、POST等方法。
  • Content-Encoding:指定文件的編碼方法。
  • Content-Length:指定響應中資料的位元組長度。
  • Content-Type:指定回送資料的MIME型別。
  • Date:指定傳送HTTP訊息的日期。
  • Last-Modified:指定返回資料的最後修改時間。
  • Location:重定向請求到一個新的URI地址。
  • Refresh:指定瀏覽器定時重新整理時間。
  • Expires:指定瀏覽器快取資料的時間。
  • Server:指定伺服器名稱,包含了處理請求的伺服器使用的軟體產品資訊,與User-Agent請求報頭相對應。

        3、響應正文

        響應正文是指伺服器所返回的資源內容,如HTML頁面。響應報頭和響應正文之間必須使用空格分隔。

        一個典型的HTTP響應示例如下:

    HTTP/1.1 200 OK                          /*狀態行*/
    Connection:close                        /*連線狀態*/
    Date:Wed, 19 Nov 2017 02:20:45 GMT     /*日期*/
    Server:Apache/2.0.54(Unix)              /*伺服器*/
    Content-Length:397                      /*指定資料包含的位元組長度*/
    Content-Type:text/html                  /*指定返回資料的MIME型別*/
    /*空行*/
    <html>
        <body>
        /*資料*/
        </body>
    </html>