任何接收到 HTTP 請求的網頁伺服器都會回應一個 HTTP 狀態碼。這些狀態碼是來自伺服器的簡短說明,用以描述當前狀況。它不包含任何實際的網站內容,而是接收到 HTTP 請求後處理情況的報告。在許多情況下,這些狀態碼對於診斷各種伺服器/用戶端問題非常重要。
這些狀態碼是三位數的整數,每個都代表不同的狀態。根據第一個數字,HTTP 狀態碼分為五大類:
-
資訊回應: 數值範圍從 100 到 199。它表示請求已收到並正在處理。
-
成功回應: 數值範圍從 200 到 299。它表示該操作已成功接收、理解並接受。
-
重定向訊息: 數值範圍從 300 到 399。這意味著需要採取進一步的操作才能完成請求。
-
用戶端錯誤回應: 數值範圍從 400 到 499。這代表請求包含錯誤的語法,或者無法被滿足。
-
伺服器錯誤回應: 數值範圍從 500 到 599。這意味著伺服器無法處理有效的請求。
在本指南中,我們將從系統管理員的角度,討論每個人都會遇到的最常見 HTTP 錯誤碼(4xx 和 5xx)。許多情況都可能導致網頁伺服器回應特定的狀態碼。此外,本教學還將討論潛在的原因和解決方案。
用戶端錯誤 vs 伺服器錯誤
錯誤碼 400 到 499 是由用戶端(網頁瀏覽器或任何 HTTP 用戶端)引起的。雖然這些錯誤大多與用戶端相關,但了解使用者遇到的是哪個錯誤碼非常有用。這有助於判斷潛在問題是否可以從伺服器端進行部署或解決。
另一方面,伺服器錯誤(HTTP 狀態碼 500 到 599)發生在伺服器意識到發生錯誤或無法處理請求時。
一般疑難排解
不論遇到什麼錯誤,每當遇到任何 HTTP 錯誤碼時,您都應該先嘗試以下一些通用疑難排解提示:
-
使用網頁瀏覽器測試伺服器時,在對伺服器進行任何變更後重新整理瀏覽器是一個好習慣。
-
伺服器記錄檔包含有關伺服器如何處理請求的詳細資訊。例如,像 Apache 和 Nginx 這樣熱門的網頁伺服器會產生檔案 access.log 與 error.log。檢查這些記錄檔可以提供有用的資訊。
-
HTTP 錯誤碼是標準的一部分。程式根據它們處理請求的方式來實作此標準。這意味著,傳回特定的狀態碼取決於伺服器軟體如何處理該特定錯誤。
本指南應可作為找出問題根源的有用指引。
常見 HTTP 錯誤
-
常見用戶端錯誤

錯誤碼 400 表示錯誤的請求(Bad Request)。它說明傳送到伺服器的 HTTP 請求包含無效的語法。讓我們來看看無效語法的潛在來源:
-
與網站相關的 Cookie 可能已損壞。清除瀏覽器的 Cookie 和快取可能會解決此問題。
-
傳送請求的網頁瀏覽器可能存在故障或錯誤。
-
這可能是由於手動建構 HTTP 請求時出錯而導致的錯誤請求,例如不當使用 curl.

當請求嘗試存取未經驗證或未正確驗證的資源時,會出現錯誤碼 401(Unauthorized,未經授權)。要解決此問題,使用者必須提供必要的憑證以存取受保護的資源。
一個範例情況是使用者嘗試存取受 HTTP 驗證保護的資源。在這種情況下,除非提供有效的使用者名稱和密碼,否則使用者將收到 401 錯誤碼。

錯誤碼 403(Forbidden,禁止存取)是指使用者請求有效,但伺服器拒絕提供服務的情況。這可能是因為缺乏存取所請求資源的權限。有幾種情況可能會導致此問題:
-
檔案權限:如果伺服器沒有足夠的權限存取要求的檔案,可能會導致 403 錯誤。可能的解決方法包括驗證伺服器是否正嘗試存取網頁伺服器的索引檔案,以及由 www-data 使用者,且索引檔案位於正確的位置(以 Nginx 為例,它是 /usr/share/nginx/html/index.html).
-
.htaccess:網頁伺服器使用 .htaccess 檔案來實作各種安全性功能,例如篩選特定的 IP 位址或範圍。可能的解決方法包括驗證 HTTP 要求來源的 IP 位址未被封鎖。
-
檔案不存在:如果要求嘗試存取的路徑沒有預設的索引檔案,且未啟用目錄清單功能,伺服器將會傳回 403 錯誤。在這種情況下,可能的解決方法包括調整伺服器設定以允許目錄清單。

錯誤代碼 404 (Not Found) 表示使用者已成功連線至網頁伺服器,但無法找到要求的資源。此錯誤可能會在多種情況下出現。以下是一些可能的疑難排解操作:
-
檢查將使用者引導至伺服器資源的連結中是否存在任何潛在的拼字錯誤。
-
使用者可能輸入了錯誤的 URL。請檢查是否為此情況,並在必要時進行修正。
-
驗證伺服器上是否存在該檔案。它是否已被移動或從伺服器中刪除?
-
伺服器可能設定了錯誤的文件根目錄位置。請檢查該設定,並在適當時進行修正。
-
使用者擁有的網頁伺服器工作處理程序是否具有遍歷所要求檔案的權限?請注意,存取目錄需要同時具備讀取和執行權限。
-
該資源是否為符號連結?若是如此,伺服器必須設定為允許追蹤符號連結。
-
常見伺服器錯誤

當伺服器因未知原因無法處理要求時,就會發生錯誤代碼 500 (Internal Server Error)。在某些情況下,當更具體的 5xx 錯誤代碼更合適時,伺服器仍會回報錯誤 500。
錯誤 500 最常見的原因之一是伺服器設定錯誤,例如格式錯誤的 .htaccess 檔案。如果缺少套件,也可能會發生此錯誤,例如在系統上未安裝 PHP 的情況下嘗試執行 PHP 程式碼。

錯誤代碼 502 (Bad Gateway) 表示伺服器是代理伺服器或閘道器,且無法從後端伺服器(實際負責處理要求的伺服器)取得有效的回應。如果伺服器是反向代理(例如負載平衡器),則有幾項不同的事項需要檢查:
-
後端伺服器運作正常。
-
反向代理已正確設定(具有正確的後端規格)。
-
反向代理與後端伺服器之間的連線正常。如果伺服器可以使用不同的連接埠進行通訊,則防火牆必須允許連線至這些連接埠。
-
如果網頁應用程式設定為使用 Socket,請確保該 Socket 存在於正確的位置並具有適當的權限。

錯誤代碼 503 (Service Unavailable) 表示伺服器目前過載或正在進行維護。這意味著伺服器應該會在某個時間點恢復可用。
如果伺服器未在進行維護,則表示伺服器沒有足夠的硬體資源(處理能力、記憶體等)來處理傳入的要求。在這種情況下,應將伺服器設定為允許更多使用者或分配更多資源。
錯誤代碼 504 (Gateway Timeout) 表示伺服器是代理伺服器或閘道器伺服器,且未在允許的時間範圍內收到來自後端的回應。有幾種情況可能會導致此問題:
-
伺服器之間的網路連線不良。
-
後端伺服器執行速度過慢(由於效能問題)。
-
閘道器/代理伺服器的逾時限制過於嚴格。
結語
本指南討論了 HTTP 錯誤代碼,特別是一些最常見的代碼。它說明了這些代碼的含義,並提供了潛在疑難排解行動的建議。有了這些知識,您現在就有了為網頁伺服器或應用程式排查問題的堅實基礎。
這只是最常見的 HTTP 狀態碼簡短列表。如需所有 HTTP 狀態碼的完整列表,請參閱 Wikipedia 上的 HTTP 狀態碼。您也可以查看我們關於 Nginx HTTP 代理、負載平衡、緩衝和快取:概述.
祝您使用愉快!
留言
目前尚無留言。成為第一個留言的人吧。