一、HTTP響應碼
響應碼由三位十進制數字組成,它們出現在由HTTP服務器發送的響應的第一行。
響應碼分五種類型,由它們的第一位數字表示:
1.1xx:信息,請求收到,繼續處理
2.2xx:成功,行爲被成功地接受、理解和採納
3.3xx:重定向,爲了完成請求,必須進一步執行的動作
4.4xx:客戶端錯誤,請求包含語法錯誤或者請求無法實現
5.5xx:服務器錯誤,服務器不能實現一種明顯無效的請求
下表顯示每個響應碼及其含義:
代碼 意義
2xx 成功
200 正常;請求已完成。
201 正常;緊接 POST 命令。
202 正常;已接受用於處理,但處理尚未完成。
203 正常;部分信息 — 返回的信息只是一部分。
204 正常;無響應 — 已接收請求,但不存在要回送的信息。
3xx 重定向
301 已移動 — 請求的數據具有新的位置且更改是永久的。
302 已找到 — 請求的數據臨時具有不同 URI。
303 請參閱其它 — 可在另一 URI 下找到對請求的響應,且應使用 GET 方法檢索此響應。
304 未修改 — 未按預期修改文檔。
305 使用代理 — 必須通過位置字段中提供的代理來訪問請求的資源。
306 未使用 — 不再使用;保留此代碼以便將來使用。
307 暫時重定向
4xx 客戶機中出現的錯誤
400 錯誤請求 — 請求中有語法問題,或不能滿足請求。
401 未授權 — 未授權客戶機訪問數據。
402 需要付款 — 表示計費系統已有效。
403 禁止 — 即使有授權也不需要訪問。
404 找不到 — 服務器找不到給定的資源;文檔不存在。
405 錯誤的方法
406 沒有可接受的
407 代理認證請求 — 客戶機首先必須使用代理認證自身。
408 請求超時
409 衝突
410 已離開
411 需要長度
412 前提條件失敗
413 請求實體太大
414 請求的 URI 太長
415 介質類型不受支持 — 服務器拒絕服務請求,因爲不支持請求實體的格式。
416 請求的範圍不滿足要求
417 期望失敗
5xx 服務器中出現的錯誤
500 內部錯誤 — 因爲意外情況,服務器不能完成請求。
501 未執行 — 服務器不支持請求的工具。
502 錯誤網關 — 服務器接收到來自上游服務器的無效響應。
503 無法獲得服務 — 由於臨時過載或維護,服務器無法處理請求。
504 網關超時
505 HTTP 版本不受支持
二、HTTP頭標
頭標由主鍵/值對組成。它們描述客戶端或者服務器的屬性、被傳輸的資源以及應該實現連接。
四種不同類型的頭標:
1.通用頭標:即可用於請求,也可用於響應,是作爲一個整體而不是特定資源與事務相關聯。
2.請求頭標:允許客戶端傳遞關於自身的信息和希望的響應形式。
3.響應頭標:服務器和於傳遞自身信息的響應。
4.實體頭標:定義被傳送資源的信息。即可用於請求,也可用於響應。
頭標格式:<name>:<value><CRLF>
下表描述在HTTP/1.1中用到的頭標
Accept 定義客戶端可以處理的媒體類型,按優先級排序;
在一個以逗號爲分隔的列表中,可以定義多種類型和使用通配符。例如:Accept: image/jpeg,image/png,*/*
Accept-Charset 定義客戶端可以處理的字符集,按優先級排序;
在一個以逗號爲分隔的列表中,可以定義多種類型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8
Accept-Encoding 定義客戶端可以理解的編碼機制。例如:Accept-Encoding:gzip,compress
Accept-Language 定義客戶端樂於接受的自然語言列表。例如:Accept-Language: en,de
Accept-Ranges 一個響應頭標,它允許服務器指明:將在給定的偏移和長度處,爲資源組成部分的接受請求。
該頭標的值被理解爲請求範圍的度量單位。例如Accept-Ranges: bytes或Accept-Ranges: none
Age 允許服務器規定自服務器生成該響應以來所經過的時間長度,以秒爲單位。
該頭標主要用於緩存響應。例如:Age: 30
Allow 一個響應頭標,它定義一個由位於請求URI中的次源所支持的HTTP方法列表。例如:Allow: GET,PUT
aUTHORIZATION 一個響應頭標,用於定義訪問一種資源所必需的授權(域和被編碼的用戶ID與口令)。
例如:Authorization: Basic YXV0aG9yOnBoaWw=
Cache-Control 一個用於定義緩存指令的通用頭標。例如:Cache-Control: max-age=30
Connection 一個用於表明是否保存socket連接爲開放的通用頭標。例如:Connection: close或Connection: keep-alive
Content-Base 一種定義基本URI的實體頭標,爲了在實體範圍內解析相對URLs。
如果沒有定義Content-Base頭標解析相對URLs,使用Content-Location URI(存在且絕對)或使用URI請求。
例如:Content-Base: Http://www.myweb.com
Content-Encoding 一種介質類型修飾符,標明一個實體是如何編碼的。例如:Content-Encoding: zip
Content-Language 用於指定在輸入流中數據的自然語言類型。例如:Content-Language: en
Content-Length 指定包含於請求或響應中數據的字節長度。例如:Content-Length:382
Content-Location 指定包含於請求或響應中的資源定位(URI)。
如果是一絕。對URL它也作爲被解析實體的相對URL的出發點。
例如:Content-Location: http://www.myweb.com/news
Content-MD5 實體的一種MD5摘要,用作校驗和。
發送方和接受方都計算MD5摘要,接受方將其計算的值與此頭標中傳遞的值進行比較。
例如:Content-MD5: <base64 of 128 MD5 digest>
Content-Range 隨部分實體一同發送;標明被插入字節的低位與高位字節偏移,也標明此實體的總長度。
例如:Content-Range: 1001-2000/5000
Contern-Type 標明發送或者接收的實體的MIME類型。例如:Content-Type: text/html
Date 發送HTTP消息的日期。例如:Date: Mon,10PR 18:42:51 GMT
ETag 一種實體頭標,它向被髮送的資源分派一個唯一的標識符。
對於可以使用多種URL請求的資源,ETag可以用於確定實際被髮送的資源是否爲同一資源。
例如:ETag: "208f-419e-30f8dc99"
Expires 指定實體的有效期。例如:Expires: Mon,05 Dec 2008 12:00:00 GMT
Form 一種請求頭標,給定控制用戶代理的人工用戶的電子郵件地址。例如:From: [email protected]
Host 被請求資源的主機名。對於使用HTTP/1.1的請求而言,此域是強制性的。例如:Host: www.myweb.com
If-Modified-Since 如果包含了GET請求,導致該請求條件性地依賴於資源上次修改日期。
如果出現了此頭標,並且自指定日期以來,此資源已被修改,應該反回一個304響應代碼。
例如:If-Modified-Since: Mon,10PR 18:42:51 GMT
If-Match 如果包含於一個請求,指定一個或者多個實體標記。只發送其ETag與列表中標記區配的資源。
例如:If-Match: "208f-419e-308dc99"
If-None-Match 如果包含一個請求,指定一個或者多個實體標記。資源的ETag不與列表中的任何一個條件匹配,操作才執行。
例如:If-None-Match: "208f-419e-308dc99"
If-Range 指定資源的一個實體標記,客戶端已經擁有此資源的一個拷貝。必須與Range頭標一同使用。
如果此實體自上次被客戶端檢索以來,還不曾修改過,那麼服務器只發送指定的範圍,否則它將發送整個資源。
例如:Range: byte=0-499<CRLF>If-Range:"208f-419e-30f8dc99"
If-Unmodified-Since 只有自指定的日期以來,被請求的實體還不曾被修改過,纔會返回此實體。
例如:If-Unmodified-Since:Mon,10PR 18:42:51 GMT
Last-Modified 指定被請求資源上次被修改的日期和時間。例如:Last-Modified: Mon,10PR 18:42:51 GMT
Location 對於一個已經移動的資源,用於重定向請求者至另一個位置。
與狀態編碼302(暫時移動)或者301(永久性移動)配合使用。
例如:Location: http://www2.myweb.com/index.jsp
Max-Forwards 一個用於TRACE方法的請求頭標,以指定代理或網關的最大數目,該請求通過網關才得以路由。
在通過請求傳遞之前,代理或網關應該減少此數目。例如:Max-Forwards: 3
Pragma 一個通用頭標,它發送實現相關的信息。例如:Pragma: no-cache
Proxy-Authenticate 類似於WWW-Authenticate,便是有意請求只來自請求鏈(代理)的下一個服務器的認證。
例如:Proxy-Authenticate: Basic realm-admin
Proxy-Proxy-Authorization 類似於授權,但並非有意傳遞任何比在即時服務器鏈中更進一步的內容。
例如:Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=
Public 列表顯示服務器所支持的方法集。例如:Public: OPTIONS,MGET,MHEAD,GET,HEAD
Range 指定一種度量單位和一個部分被請求資源的偏移範圍。例如:Range: bytes=206-5513
Refener 一種請求頭標域,標明產生請求的初始資源。對於HTML表單,它包含此表單的Web頁面的地址。
例如:Refener: http://www.myweb.com/news/search.html
Retry-After 一種響應頭標域,由服務器與狀態編碼503(無法提供服務)配合發送,以標明再次請求之前應該等待多長時間。
此時間即可以是一種日期,也可以是一種秒單位。例如:Retry-After: 18
Server 一種標明Web服務器軟件及其版本號的頭標。例如:Server: Apache/2.0.46(Win32)
Transfer-Encoding 一種通用頭標,標明對應被接受方反向的消息體實施變換的類型。例如:Transfer-Encoding: chunked
Upgrade 允許服務器指定一種新的協議或者新的協議版本,與響應編碼101(切換協議)配合使用。
例如:Upgrade: HTTP/2.0
User-Agent 定義用於產生請求的軟件類型(典型的如Web瀏覽器)。
例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)
Vary 一個響應頭標,用於表示使用服務器驅動的協商從可用的響應表示中選擇響應實體。例如:Vary: *
Via 一個包含所有中間主機和協議的通用頭標,用於滿足請求。例如:Via: 1.0 fred.com, 1.1 wilma.com
Warning 用於提供關於響應狀態補充信息的響應頭標。例如:Warning: 99 www.myweb.com Piano needs tuning
www-Authenticate 一個提示用戶代理提供用戶名和口令的響應頭標,與狀態編碼401(未授權)配合使用。響應一個授權頭標。
例如:www-Authenticate: Basic realm=zxm.mgmt
以下是兩個最常用的 HTTP 響應代碼的描述及應用場合:
404
找不到 URL 時,生成 404 HTTP 響應代碼。當不能聯繫到某個服務器或實際資源不存在時,發生該響應。例如,如果 Web 服務器主機 www.google.com 在進行維護而關閉或某個組件在升級,而用戶試圖查看 http://www.google.com,則該用戶將看到 404 響應。通常,404 響應通過 Web 瀏覽器以用戶友好的方式顯示。例如,Microsoft Internet Explorer 對 404 響應顯示一個特殊的錯誤頁面。
500
當服務器由於內部服務器錯誤而不能爲請求服務時,生成 500 HTTP 響應代碼。例如,500 HTTP 響應代碼可能通過以下事件序列生成:
開發者在 http://tests.mySoftwareDesignTestCases.org 上編寫並部署應用程序。
用戶訪問 http://tests.mySoftwareDesignTestCases.org/test12.jsp。與前面 404 響應代碼示例引用的頁面不同,該頁面存在且可以聯繫。
被訪問頁面上的代碼在某點被零分隔,造成內部應用程序錯誤。
當識別出該情況時,服務器返回 500 響應。