在接受到一個請求後,服務器會返回一個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>