HTTP 狀態碼參考指南
每個 HTTP 回應都以一個三位數的狀態碼開頭,告訴用戶端要求的處理結果。依類別瀏覽各個狀態碼,查看白話易懂的說明、回應範例,以及每個狀態碼對重新導向與 SEO 的意義。
1xx 資訊回應
伺服器已收到要求,正在繼續處理。這類中間回應會在最終回應之前送達,絕不會成為重新導向鏈的終點。
2xx 成功
要求已成功接收、理解並接受。正常的重新導向鏈會以這類狀態碼結束,通常是 200 OK。
- 200
OK
要求成功;若為 GET,回應主體就是所要求的資源。每條重新導向鏈都應該在回傳 200 的網址畫下句點。 - 201
已建立
要求成功並建立了新資源,通常發生在 POST 或 PUT 之後。若有 Location 標頭,它會指向新建立的資源。 - 202
已接受
要求已被接受處理,但尚未完成。用於非同步工作,最終結果並不保證。 - 203
非權威資訊
要求成功,但轉換型代理伺服器修改了回應,因此內容與原始伺服器送出的並不完全相同。 - 204
無內容
要求成功,但沒有內容可傳送。瀏覽器會停留在目前的網頁;常見於 DELETE、信標與 CORS 預檢要求。 - 205
重設內容
要求已成功,用戶端應將文件檢視重設為原始狀態,例如清空剛送出的表單。 - 206
部分內容
伺服器只傳送用戶端以 Range 標頭要求的位元組範圍,常用於影片串流與續傳下載。 - 207
多重狀態
WebDAV 回應,在 XML multistatus 主體中為多個資源或屬性分別提供各自的狀態碼。 - 208
已回報
用於 WebDAV 207 回應內部:此集合的成員先前已經列出,可避免繫結形成迴圈時無止盡地重複列出。 - 226
IM Used
伺服器以差異編碼(RFC 3229)回應 GET:回應主體只包含相對於用戶端現有版本的變更。
3xx 重新導向
用戶端必須採取進一步的動作,通常是對 Location 標頭中的 URL 發出要求。重新導向鏈就是由這類狀態碼組成。
- 300
多重選擇
資源有多種表示法,可由用戶端擇一。即使附有 Location 標頭,瀏覽器也不會自動跟隨 300。 - 301
永久移動
永久重新導向(301 轉址):資源已有新的永久網址,列在 Location 標頭中。用戶端與搜尋引擎此後都應改用新網址。 - 302
已找到
暫時重新導向(302 轉址):資源暫時位於另一個網址。用戶端會跟隨 Location 標頭,但日後仍應繼續使用原始網址。 - 303
參見其他
將用戶端重新導向至另一個必須以 GET 擷取的網址,通常用於送出表單後顯示結果頁面(Post/Redirect/Get)。 - 304
未修改
回應條件式 GET 或 HEAD:用戶端快取的副本仍然有效,因此伺服器不傳送主體,直接沿用快取副本。 - 305
使用代理伺服器
已淘汰。過去用來要求用戶端透過 Location 中指定的代理伺服器重送要求;基於安全考量,瀏覽器會忽略它。 - 306
未使用(Switch Proxy)
保留未使用。306 曾被提議作為「Switch Proxy」,但後來遭到捨棄;不得使用,用戶端會將它視為未知的 3xx 狀態碼。 - 307
暫時重新導向
暫時重新導向(307 轉址),必須以相同的方法與主體向 Location 網址重送要求;302 則可能把 POST 改成 GET。 - 308
永久重新導向
保留要求方法與主體的永久重新導向(308 轉址)。與 301 一樣應改用新網址,但 POST 絕不會被改成 GET。
4xx 用戶端錯誤
要求無法依原樣完成,例如網頁不存在、存取遭拒,或用戶端傳送的要求過多。
- 400
錯誤的要求
由於用戶端錯誤,例如語法錯誤、網址無效或 Cookie 過大,伺服器不會處理這個要求。 - 401
未經授權
要求需要有效的身分驗證。伺服器必須傳送 WWW-Authenticate 標頭,說明驗證方式,例如 Basic 或 Bearer。 - 402
需要付款
HTTP 保留供日後使用的狀態碼。實務上,有些 API 和服務會在需要付款、點數或訂閱時使用它。 - 403
禁止存取
伺服器理解這個要求,但拒絕授權。與 401 不同,再次傳送相同的憑證也無濟於事。 - 404
找不到
伺服器在這個網址沒有任何內容,或不願透露是否存在。它不會說明資源是暫時還是永久不存在。 - 405
不允許的方法
網址存在,但不支援所使用的 HTTP 方法,例如對靜態網頁發出 POST。Allow 標頭會列出支援的方法。 - 406
無法接受
伺服器無法產生符合用戶端 Accept 標頭(格式、語言、編碼)的回應,也不願改傳預設版本。 - 407
需要代理伺服器驗證
與 401 類似,但要求身分驗證的是用戶端與伺服器之間的代理伺服器。Proxy-Authenticate 標頭會說明驗證方式。 - 408
要求逾時
伺服器未在時限內收到完整的要求,因此關閉連線。用戶端可以在新的連線上重送要求。 - 409
衝突
要求與資源目前的狀態衝突,例如編輯衝突、重複的紀錄或版本不符。 - 410
已永久移除
資源是刻意移除的,預計不會再恢復。這是比 404 Not Found 更明確、更具永久性的訊號。 - 411
需要長度
伺服器拒絕帶有主體卻沒有 Content-Length 標頭的要求。用戶端可以加上有效的 Content-Length 後重送。 - 412
先決條件失敗
要求標頭中的條件(例如 If-Match 或 If-Unmodified-Since)不成立,因此伺服器沒有套用變更。 - 413
內容過大
要求主體超過伺服器可接受的大小,例如上傳的檔案過大。舊稱「Payload Too Large」與「Request Entity Too Large」。 - 414
URI 過長
所要求的網址超過伺服器願意處理的長度,例如重新導向迴圈不斷在網址後面附加參數。 - 415
不支援的媒體類型
伺服器拒絕要求主體,因為不支援它的格式(Content-Type)或內容編碼(Content-Encoding)。 - 416
無法滿足要求範圍
Range 標頭中的位元組範圍超出檔案範圍,例如檔案已變更,續傳下載的位置卻超過檔案結尾。 - 417
預期條件失敗
伺服器無法滿足要求的 Expect 標頭中的預期。實務上,這代表不支援 Expect: 100-continue。 - 418
我是茶壺
源自 1998 年咖啡壺協定(RFC 2324)的愚人節玩笑。在 HTTP 中保留為未使用,但有些網站會刻意回傳它。 - 421
錯誤導向的要求
要求抵達的伺服器無法為這個主機名稱提供回應,通常是因為 TLS SNI 不符,或重複使用了 HTTP/2 連線。 - 422
無法處理的內容
要求格式正確,但內容在語意上無效,通常是 API 的驗證錯誤。舊稱「Unprocessable Entity」。 - 423
已鎖定
WebDAV:資源已被鎖定,目前無法套用該方法。用戶端需要鎖定權杖,或必須等待鎖定解除。 - 424
相依性失敗
WebDAV:由於所依賴的另一項操作失敗,該方法無法執行,例如 PROPPATCH 中的單一屬性失敗。 - 425
太早
伺服器不會處理以 TLS 早期資料(0-RTT)傳送的要求,因為它可能遭到重放。用戶端會在交握完成後重試。 - 426
需要升級
伺服器拒絕以目前的通訊協定處理要求,要求升級至 Upgrade 標頭中指定的通訊協定。 - 428
需要先決條件
伺服器要求以條件式要求(If-Match)送出,以免多個用戶端編輯同一資源時發生更新遺失。 - 429
要求過多
用戶端在一定時間內送出太多要求(速率限制)。Retry-After 標頭可能會說明要等待多久才能重試。 - 431
要求標頭欄位過大
要求的標頭過大,伺服器因此拒絕處理,原因通常是瀏覽器傳送的 Cookie 太多或太大。 - 444
無回應
nginx nginx 的非標準狀態碼:伺服器不傳送任何回應就直接關閉連線。用戶端只會看到空白回覆,永遠不會看到 444。 - 451
因法律原因無法提供
由於法院命令或政府封鎖等法律要求,存取遭到拒絕。名稱取自雷·布萊伯利的小說《華氏 451 度》。 - 499
用戶端已關閉要求
nginx nginx 的非標準狀態碼:用戶端在伺服器送出回應之前就關閉連線時,nginx 會將它寫入存取記錄。
5xx 伺服器錯誤
伺服器無法完成一個看似有效的要求。持續出現的 5xx 錯誤會同時擋住訪客與爬蟲。
- 500
伺服器內部錯誤
通用的伺服器端錯誤:伺服器發生了問題,例如應用程式當機或設定檔損壞。 - 501
未實作
伺服器不支援完成要求所需的功能,通常是指它無法辨識的 HTTP 方法。 - 502
錯誤的閘道
閘道或代理伺服器從上游伺服器收到無效的回應,例如 nginx 後方的應用程式已當機。 - 503
服務無法使用
伺服器因過載或維護而暫時無法處理要求。Retry-After 可以說明何時再試。 - 504
閘道逾時
閘道或代理伺服器未能及時從上游伺服器取得回應,通常是因為應用程式太慢。 - 505
不支援的 HTTP 版本
伺服器不支援或拒絕支援要求所使用的 HTTP 主要版本。如今這往往暗示要求列的格式有誤。 - 506
變體亦需協商
透明內容協商(RFC 2295)中的伺服器設定錯誤:選定的變體本身也需要協商,因而形成迴圈。 - 507
儲存空間不足
WebDAV:伺服器無法儲存完成要求所需的資料,例如磁碟或使用者配額已滿。 - 508
偵測到迴圈
WebDAV:伺服器在 Depth: infinity 作業中發現無限的繫結迴圈,因而停止作業。與重新導向迴圈無關。 - 510
未擴充
源自已過時的 HTTP 擴充框架(RFC 2774):要求缺少必要的擴充宣告。屬於歷史狀態碼,實際上已不再使用。 - 511
需要網路驗證
網路(通常是 Wi-Fi 的強制登入頁面)要求先登入才能存取。這由攔截流量的網路傳送,而不是原始伺服器。 - 520
網頁伺服器傳回未知錯誤
Cloudflare Cloudflare 專用:原始伺服器傳回空白、未知或非預期的回應,例如在當機或連線被重設之後。 - 521
網頁伺服器已關閉
Cloudflare Cloudflare 專用:原始伺服器拒絕了來自 Cloudflare 的連線,通常是因為網頁伺服器已停止運作或封鎖了 Cloudflare。 - 522
連線逾時
Cloudflare Cloudflare 專用:Cloudflare 無法及時與原始伺服器完成 TCP 連線,或原始伺服器沒有確認收到要求。 - 523
無法連線至原始伺服器
Cloudflare Cloudflare 專用:Cloudflare 完全無法連上原始伺服器,通常是因為路由問題,或 DNS 中的原始伺服器 IP 位址有誤。 - 524
發生逾時
Cloudflare Cloudflare 專用:Cloudflare 已連線到原始伺服器,但在讀取逾時(預設約 2 分鐘)之前沒有收到 HTTP 回應。 - 525
SSL 交握失敗
Cloudflare Cloudflare 專用:Cloudflare 與原始伺服器之間的 TLS 交握失敗,例如原始伺服器沒有有效的憑證。 - 526
SSL 憑證無效
Cloudflare Cloudflare 專用:在「完整(嚴格)」模式下,Cloudflare 無法驗證原始伺服器的憑證,例如憑證已過期、為自我簽署或屬於其他名稱。 - 530
Cloudflare 1xxx 錯誤
Cloudflare Cloudflare 專用:與 Cloudflare 的 1xxx 錯誤一起傳送,例如 1016(原始伺服器 DNS 錯誤)或 1033(Cloudflare Tunnel 錯誤)。
如何解讀 HTTP 狀態碼
第一位數字代表回應的類別,後兩位數字則表示該類別中的確切意義。用戶端若無法辨識某個狀態碼,會把它當成同類別的 x00 狀態碼處理,因此未知的 4xx 狀態碼會比照 400 Bad Request 處理。
數字後面的原因短語(reason phrase),例如 Not Found 或 Moved Permanently,只是寫給人看的說明。用戶端只依數字採取行動,而 HTTP/2 與 HTTP/3 更是完全不傳送原因短語。
重新導向狀態碼速覽
- 301 Moved Permanently:永久重新導向;瀏覽器可能會把 POST 改成 GET。網頁搬移時的預設選擇。
- 302 Found:暫時重新導向;要求方法可能會改變。許多框架的預設值。
- 303 See Other:暫時重新導向;一律改用 GET 前往新網址。常用於表單送出之後。
- 307 Temporary Redirect:暫時重新導向;保留原本的要求方法與主體。
- 308 Permanent Redirect:永久重新導向;保留原本的要求方法與主體。
- 304 Not Modified:並非重新導向到其他網址,而是表示用戶端快取的副本仍然有效。
想知道各狀態碼的使用時機,請參閱 HTTP 重新導向狀態碼詳解。
網址重新導向檢查
使用免費的 TrueURL 重新導向檢查工具,逐一查看網址在每個躍點回傳的狀態碼。