HTTP 狀態碼完整參考:200 到 599 全解 | 開發者與 SEO 必備指南

在網際網路的世界裡,瀏覽器(Client)與伺服器(Server)之間的溝通,本質上是一場永無止境的問答。當你輸入一個網址並按下 Enter,瀏覽器會發送一個 HTTP 請求,而伺服器在處理完畢後,必須回傳一個「回應」。這個回應中,最關鍵的資訊之一就是 HTTP 狀態碼(HTTP Status Code)。

對於前端開發者來說,狀態碼是除錯(Debugging)的第一線線索;對於後端工程師來說,它是 API 設計與系統穩定性的指標;而對於 SEO 專家來說,狀態碼的正確性直接決定了搜尋引擎如何索引你的網站。

本文將為你提供一份 HTTP 狀態碼完整參考,從 200 系列到 500 系列進行深度解析,幫助你掌握網頁通訊的核心邏輯。如果你在開發過程中遇到不明原因的連線問題,也可以利用 HTTP 狀態碼檢查工具 來快速診斷問題所在。


100-199:資訊性回應(Informational)

這類狀態碼在現代網頁開發中較少直接與使用者互動,但它們在底層通訊中扮演著重要的「過渡」角色。

1xx 類別:正在處理中

這類狀態碼表示伺服器已收到請求的一部分,正在繼續處理後續的部分。

  • 100 Continue:客戶端應繼續發送請求的一部分。這常用於處理大型檔案上傳,當客戶端先發送 Header,伺服器回傳 100,告訴客戶端「我準備好了,可以開始傳送 Body 了」。
  • 101 Switching Protocols:伺服器正在根據客戶端的請求切換協定(例如從 HTTP 切換到 WebSocket)。

2xx:成功回應(Success)

當你看到 2xx 系列的狀態碼時,代表你的請求已經成功被伺服器接收、理解並處理。這是開發者最希望看到的結果。

200 OK:最經典的成功

這是最常見的狀態碼。當請求成功且回應主體(Response Body)包含正確資訊時,伺服器會回傳 200。無論是讀取網頁、取得 JSON 資料或是提交表單,只要一切順利,就是 200。

201 Created:資源已建立

這在 RESTful API 設計中非常重要。當你發送一個 POST 請求來建立新資源(例如註冊新用戶、上傳新文章)且伺服器成功建立該資源時,應回傳 201。此時,回應通常會包含新資源的 URI。

202 Accepted:已接受但尚未處理完成

這代表伺服器已接受請求,但尚未完成處理。這常用於「非同步處理」的場景,例如你提交了一個大型影片轉檔任務,伺服器回傳 202 告訴你:「我收到任務了,但還在排隊中,請稍後再來查詢進度」。

2․ 204 No Content:成功但無內容

這表示請求已成功,但伺服器不需要回傳任何內容。常見於 DELETE 請求(刪除成功後不需要回傳資料)或某些 PUT 更新請求。


3xx:重定向回應(Redirection)

3xx 系列狀態碼告訴瀏覽器:「你要找的東西不在這裡,請去另一個地方」。這對於網站遷移與 URL 結構調整至關重要。

301 Moved Permanently:永久重新導向

這是 SEO 的重中之重。 當你更換了網域或修改了網址結構,且未來都不會再使用舊網址時,應使用 301。它會將原有的「權重(Link Juice)」傳遞給新網址,讓搜尋引擎知道舊頁面已永久搬家。

302 Found:暫時性重新導向

這表示資源暫時移動到了另一個位置。與 301 不同,302 不會傳遞權重,搜尋引擎仍會保留舊網址的索引。常用於活動頁面導向或根據使用者語言進行的暫時性跳轉。

304 Not Modified:內容未變動(快取機制)

這是一個提升網站效能的關鍵狀態碼。當瀏覽器請求資源時,會帶上 If-Modified-Since 標頭。如果伺服器發現檔案自上次下載後未變動,就會回傳 304。這告訴瀏覽器:「直接用你本地的快取即可,不需要重新下載」,大幅節省頻寬與載入時間。

307 Temporary Redirect 與 308 Permanent Redirect

這兩個是 HTTP/1.1 引入的新標準,旨在解決 302 與 301 在處理 POST 請求時可能改變 Method 的問題。 * 307:確保重定向時,請求方法(如 POST)不會變成 GET。 * 308:與 301 類似,但同樣保證 Method 不變。


4xx:用戶端錯誤(Client Error)

當你看到 4xx 時,代表問題出在「請求端」。可能是 URL 打錯了、權限不足,或是發送了格式錯誤的資料。

400 Bad Request:錯誤的請求

伺服器無法理解請求的語法。這通常是因為前端傳送的 JSON 格式錯誤、缺少必要的參數,或是參數類型不符(例如預期是數字卻傳了字串)。

401 Unauthorized:未經授權

這代表請求需要身分驗證。如果你嘗試存取需要登入的 API,但沒有提供正確的 Token 或 Cookie,伺服器就會回傳 401。

403 Forbidden:禁止存取

這與 401 不同。401 是「不知道你是誰」,而 403 是「我知道你是誰,但你沒有權限看這個」。例如,一般用戶嘗試存取管理員後台,伺服器會回傳 403。

404 Not Found:找不到資源

開發者最熟悉的錯誤。請求的 URL 在伺服器上不存在。這可能是因為連結失效、檔案被刪除,或是開發者在路徑拼字上出了錯。

4的 405 Method Not Allowed:不允許的使用方法

這發生在請求的 Method 與伺服器定義的不符。例如,你對一個只接受 POST 的 API 發送了 GET 請求。

429 Too Many Requests:請求過於頻繁

這是 API 流量限制(Rate Limiting)的警訊。當單一 IP 或使用者在短時間內發送過多請求,伺服器會回傳 429 來保護系統不被 DDoS 攻擊或過度爬蟲耗盡資源。


5xx:伺服器錯誤(Server Error)

當你看到 5xx 時,請檢查你的後端代碼、資料庫連線或伺服器設定。這代表請求本身沒問題,但伺服器在處理過程中「崩潰」或「出錯」了。

500 Internal Server Error:伺服器內部錯誤

最泛用的錯誤代碼。當後端程式碼拋出未捕獲的 Exception(異常),或是發生了未預期的邏輯錯誤時,伺服器通常會回傳 500。

502 Bad Gateway:錯誤的閘道

這通常發生在代理伺服器(如 Nginx)與後端應用伺服器(如 Node.js, Python Gunicorn)之間。當 Nginx 嘗試連接後端,但後端沒有回應或已關閉,就會回傳 502。

503 Service Unavailable:服務不可用

這代表伺服器目前無法處理請求,通常是因為伺服器過載(Overload)或正在進行維護(Maintenance)。

504 Gateway Timeout:閘道逾時

與 502 類似,但 504 是指代理伺服器雖然連上了後端,但後端處理時間太長,導致代理伺服器等得不耐煩而主動中斷連線。


狀態碼快速比較表

為了方便開發者查閱,下表整理了最常遇到的狀態碼及其核心差異:

狀態碼分類 代表意義 對 SEO 的影響 建議處理動作
200 OK 成功 正向,利於索引 無需處理
301 Moved Permanently 永久搬家 正向,權重會轉移 檢查新舊 URL 是否正確對應
304 Not Modified 使用快取 正向,提升載入速度 優化 Cache-Control 標頭
401 Unauthorized 需要登入 中性 檢查 Authentication Token
403 Forbidden 無權限存取 負向,搜尋引擎無法抓取 檢查權限控管 (ACL) 設定
404 Not Found 找不到頁面 負向,造成使用者體驗不佳 設定 404 導引頁或進行 301 重定向
500 Internal Error 伺服器崩潰 極負向,會影響排名 檢查後端 Log 與 Exception 紀錄
503 Service Unavailable 伺服器維護/過載 短期負向 檢查伺服器資源與負載平衡器

實戰範例:如何在 JavaScript 中處理 HTTP 狀態碼

在前端開發中,我們經常使用 fetch API 來與後端溝通。一個專業的開發者不應該只假設請求會成功,而應該針對不同的狀態碼進行邏輯判斷。

以下是一個完整的範例,展示如何根據不同的 HTTP 狀態碼執行不同的業務邏輯:

async function fetchData(url) {
    try {
        const response = await fetch(url);

        // 檢查 response.ok (這代表狀態碼在 200-299 之間)
        if (response.ok) {
            const data = await response.json();
            console.log("✅ 請求成功:", data);
            return data;
        }

        // 針對特定錯誤狀態碼進行處理
        switch (response.status) {
            case 401:
                console.error("❌ 身份驗證失敗:請重新登入");
                // 執行導向登入頁面的邏輯
                break;
            case 403:
                console.error("❌ 權限不足:您沒有權限查看此內容");
                break;
            case 404:
                console.error("❌ 找不到資源:請檢查 URL 是否正確");
                break;
            case 429:
                console.error("⚠️ 請求太頻繁:請稍後再試");
                break;
            case 500:
                console.error("🔥 伺服器出錯:請聯繫後端工程師");
                break;
            case 503:
                console.error("🛠️ 伺服器維護中:請稍後再回來");
                break;
            default:
                console.error(`❌ 發生未知錯誤,狀態碼:${response.status}`);
        }
    } catch (error) {
        // 這裡處理網路斷線、DNS 解析失敗等網路層級的錯誤
        console.error("🌐 網路連線異常或 CORS 錯誤:", error.message);
    }
}

// 使用範例
fetchData('https://api.example.com/user/profile');

FAQ:關於 HTTP 狀態碼的常見問題

Q1: 301 和 302 有什麼本質上的區別?

A: 最核心的區別在於「權重轉移」與「搜尋引擎的行為」。301 是永久性的,搜尋引擎會將舊網址的排名權重移交給新網址;302 是暫時性的,搜尋引擎仍會保留舊網址的索引,這對於需要頻繁切換的短暫活動非常有用。

Q2: 為什麼我的網站出現 502 錯誤,但伺服器看起來是正常的?

A: 502 通常發生在「代理層」。如果你的架構使用了 Nginx 作為反向代理,雖然 Nginx 服務正常,但它後端的應用伺服器(如 Node.js 或 PHP-FPM)可能因為當機、資源耗盡或配置錯誤而無法回應。請檢查後端服務的運行狀態與 Nginx 的 error.log。

Q3: 404 錯誤會影響 SEO 嗎?

A: 會。雖然偶爾的 404 是正常的(例如產品下架),但如果大量的重要頁面出現 404,搜尋引擎會認為你的網站品質下降,且會浪費爬蟲的「抓取預算(Crawl Budget)」。建議針對重要的失效連結,使用 301 導向至相關的替代頁面。

Q4: 什麼時候應該使用 204 No Content?

A: 當你的 API 執行了一個動作(例如刪除資料、更新設定),且這個動作不需要回傳任何 JSON 或文字內容給前端時,使用 204 是最符合 RESTful 規範的做法,這能減少網路傳輸的負擔。

Q5: 429 Too Many Requests 應該如何緩解?

A: 對於開發者來說,應在前端實作「指數退避(Exponential Backoff)」演算法,即在收到 429 後,等待一段時間再重試,且每次重試的等待時間隨次數增加。對於系統管理員,則應檢查是否有惡意爬蟲或異常的 API 調用流量。

Q6: 為什麼 304 狀態碼對網站效能提升這麼大?

A: 因為 304 意味著「不傳輸內容」。瀏覽器不需要重新下載圖片、CSS 或 JavaScript,只需要接收一個極小的 Header 訊息,確認檔案沒變。這能極大化減少瀏覽器的下載量,縮短首屏渲染時間(FCP)。


結論

掌握 HTTP 狀態碼完整參考 不僅是開發者的基本功,更是維護高品質網站的基石。正確地使用 2xx 確保服務順暢,利用 3xx 進行精準的流量引導與 SEO 優化,透過 4xx 強化系統安全性與使用者體驗,並透過 5xx 監控伺服器的健康狀況。

當你在開發過程中遇到難以捉摸的連線問題時,請務必養成查看 Network Tab 中狀態碼的習慣。如果你需要更系統化的工具來檢測網路請求的正確性,歡迎探索 Super Tools 研發工具箱,我們提供多樣化的開發者工具,助你打造更穩定的 Web 應用。