Web服務器返回給瀏覽器的響應信息由4個部分組成,分別是狀態行、響應頭、空行以及響應正文。HTTP響應的格式如圖1所示。
下面是通過瀏覽器訪問百度百科中詞條python時,Web服務器返回的響應信息,具體內容如下。
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: deflate
Content-Security-Policy-Report-Only: default-src https:.
Content-Type: text/html; charset=UTF-8
Date: Thu, 15 Jul 2021 06:25:42 GMT
Server: Apache
Vary: Accept-Encoding
Transfer-Encoding: chunked
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />.
上述響應信息中,第1行代碼是狀態行,第2~9行代碼是響應頭,第10行是空行,第11~14行代碼是響應正文。需要注意的是,即使響應信息中沒有響應正文,也必須在末尾加上空行。
下面分別對狀態行、響應頭和響應正文進行介紹。
1.狀態行
上述響應信息的狀態行的具體內容如下。
HTTP/1.1 200 OK
在狀態行中,HTTP/1.1表示HTTP的版本號,200表示響應狀態碼,OK表示響應狀態碼的簡短描述。
響應狀態碼代表服務器的響應狀態,它的作用是告知瀏覽器請求Web資源的結果,如請求成功、請求異常、服務器處理錯誤等。響應狀態碼及說明如下表所示。
響應狀態碼及說明
2.響應頭
上述響應信息中,狀態行下面的部分便是若干個響應頭信息。響應頭的格式與請求頭的格式相同。關于響應頭中的常用字段及常用值的介紹如下。
( 1) Cache-Control: must-revalidate、 no-cache, private。
Cache-Control表示服務器告知瀏覽器當前的HTTP 響應是否可以緩存,取值為must-revalidate表示在一個緩存過期之后,不能直接使用這個過期的緩存,必須檢驗之后才能使用;取值為no-cache表示瀏覽器可以緩存資源,每次使用緩存資源前都必須重新驗證其有效性;取值為private表示響應只能被單個用戶緩存,不能作為共享緩存。
(2) Connection: keep-alive、 closed。
Connection表示瀏覽器是否使用持久HTTP連接,取值為keep-alive表示使用持久連接;取值為closed 表示不使用持久連接。
(3) Content-Encoding: gzip、 compress, identity。
Content-Encoding表示服務器對特定媒體類型的數據進行壓縮,取值為gzip表示采用Lempel-Ziv 壓縮算法;取值為compress表示采用Lempel-Ziv-Welch 算法;取值為identity 表示數據未經壓縮或修改。
(4) Content-Type: text/html;charset=UTF-8。
Content-Type表示服務器告知瀏覽器實際返回的內容的類型,取值為text/html;charset=UTF-8表示服務器返回資源文件的類型為text/html,字符編碼格式為UTF-8。
3.響應正文
響應正文是服務器返回的具體數據,常見的數據是HTML源代碼。瀏覽器在接收到HTTP響應后,會根據響應正文的不同類型進行不同的處理。如果響應正文是DOC文檔,那么瀏覽器會借助安裝在本機的Word程序打開這份文檔;如果響應正文是RAR壓縮文件,那么瀏覽器會彈出一個下載窗口讓用戶下載解壓軟件;如果響應正文是HTML文檔,那么瀏覽器會在自身的窗口中展示該文檔。