當我們在瀏覽器輸入URL并按下Enter鍵時,瀏覽器就會向站點的服務器發送一個HTTP請求,服務器接收并處理請求,然后將相關資源和HTTP標頭一起返回??梢栽跒g覽器的Network中查看 HTTP 的請求狀態碼:
(資料圖)
維基百科中對HTTP狀態碼的解釋:
HTTP狀態碼(HTTP Status Code)是用以表示網頁服務器超文本傳輸協議響應狀態的3位數字代碼。它由 RFC 2616 規范定義的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 與 RFC 4918 等規范擴展。所有狀態碼被分為五類,狀態碼的第一個數字代表了響應的五種狀態之一。所示的消息短語是典型的,但是可以提供任何可讀取的替代方案。除非另有說明,狀態碼是HTTP/1.1標準(RFC 7231)的一部分。
HTTP 狀態代碼是從 Web 服務器發送的 3 位代碼(如 200 OK 或 404 Not Found),用于讓我們和搜索引擎知道請求中是否存在任何錯誤或服務器嘗試處理請求時是否存在任何問題。
2. 分類應用通常就是客戶端向服務器發出請求,服務器做出響應。狀態碼就是讓我們知道 HTTP 請求是成功、失敗還是其他。HTTP狀態碼通常分為五類:
類別 | 定義 | 描述 |
1xx | Informational(信息性狀態碼) | 接受的請求正在處理 |
2xx | Success(成功狀態碼) | 請求正常處理完畢 |
3xx | Redirection(重定向狀態碼) | 需要進行附加操作來完成請求 |
4xx | Client Error (客戶端錯誤狀態碼) | 服務器無法處理請求 |
5xx | Server Error(服務器錯誤狀態碼) | 服務器處理請求出錯 |
HTTP 狀態代碼對于診斷應用問題很重要,例如網絡服務器是否無法正常工作且無法提供頁面等??焖侔l現這些問題對于開發人員和搜索引擎提供良好的體驗非常重要。那為什么 HTTP 狀態代碼和錯誤對搜索引擎優化 (SEO) 很重要呢?
搜索引擎機器人在抓取網站時會看到 HTTP 狀態碼。在某些情況下,這些會影響網頁是否以及如何被編入索引,以及搜索引擎如何看待網站的健康狀況。
一般來說,1XX 和 2XX 狀態碼不會對 SEO 產生太大影響。因為它們表明網站上是正常運行的,并使搜索引擎機器人能夠繼續執行操作。但是,它們并不會提高網站的排名。在大多數情況下,對 SEO 重要的是更高級別的代碼。4XX 和 5XX 響應會阻止機器人抓取和索引頁面。錯誤太多也可能表明網站質量不高,可能會降低網站的排名。
3XX 狀態碼與 SEO 的關系就會復雜很多。要想了解它們的影響,就需要了解永久重定向和臨時重定向之間的區別,這里先不解釋,后面再詳細介紹??傊?,對已經遷移的頁面使用永久重定向會有更好的SEO。
可以使用 Google Search Console,在覆蓋率報告中查看 3XX、4XX 和 5XX 的狀態代碼:
這個報告中會顯示網站中四種類型的頁面:
返回錯誤的頁面;有警告但是有效的頁面;有效的頁面;從索引中排除的頁面;我們可以在除了有效頁面之外的三類中找到3XX、4XX、5XX 的HTTO狀態碼的頁面,具體的話取決于狀態碼類型,比如301重定向可能會出現在最后一種中。
二、HTTP 狀態碼列表4XX 和 5XX 狀態碼可能會出現在Error下。
1. 1xx Informational1XX的狀態碼是在HTTP/1.1 中引入的,它們是信息性的狀態碼,是臨時的,表示請求已被接受,需要繼續處理。這些狀態碼并沒有提供太多有用的信息,我們可能永遠看不到1XX相關的狀態碼。
(1)100 Continue
服務器已收到瀏覽器的請求標頭,并且現在已準備好發送請求正文。這使得請求過程更加高效,因為它可以防止瀏覽器發送正文請求,即使標頭已被拒絕。
(2)101 Switching Protocols
服務器已經接受了客戶端的請求,并將通過Upgrade消息頭通知客戶端采用不同的協議來完成這個請求。在發送完這個響應最后的空行后,服務器將會切換到在Upgrade消息頭中定義的協議。
(3)102 Processing
服務器已經收到并正在處理請求,目前還沒有響應。這樣可以防止客戶端超時,并假設請求丟失。
(4)103 Early hints
在服務器響應的HTTP消息之前返回一些響應頭。該狀態碼用于允許用戶代理預加載資源,同時服務器準備響應。
2. 2xx Success2xx 狀態碼表示客戶端的請求被成功接收、理解和接受。
(1)200 OK
表示客戶端發來的請求被服務器端正常處理了。從 SEO 的角度來看,200 OK 狀態碼是功能頁面的完美狀態碼,所有鏈接頁面都在正常工作。200 表示搜索引擎爬蟲可以成功爬取該頁面并將其放入其搜索引擎中。
(2)201 Created
服務器完成了瀏覽器的請求,因此創建了一個或多個新資源。
(3)202 Accepted
服務器已接受瀏覽器的請求,但仍在處理中。該請求最終可能會也可能不會進行響應。
(4)203 Non-authoritative Information
使用代理時可能會出現此狀態代碼。這意味著代理服務器從源服務器收到了 200 狀態代碼,但在將響應傳遞給瀏覽器之前已對其進行了修改。
(5)204 No Content
該狀態碼表示客戶端發送的請求已經在服務器端正常處理了,但是沒有返回的內容,響應報文中不包含實體的主體部分。一般在只需要從客戶端往服務器端發送信息,而服務器端不需要往客戶端發送內容時使用。
(6)205 Reset Content
服務器端成功處理了請求,且沒有返回任何內容。但是與204響應不同,返回此狀態碼的響應要求請求者重置文檔視圖。該響應主要是被用于接受用戶輸入后,立即重置表單,以便用戶能夠輕松地開始另一次輸入。
(7)206 Partial Content
該狀態碼表示客戶端進行了范圍請求,而服務器端執行了這部分的 GET 請求。響應報文中包含由Content-Range指定范圍的實體內容。
(8)226 IM Used
服務器已成功處理瀏覽器的 GET 方法,以檢索已緩存資源的更新版本。通常,當請求的資源有一個或多個輕微修改時返回響應。
3. 3xx Redirection3XX 響應結果表明瀏覽器需要執行某些特殊的處理以正確處理請求。
(1)300 Multiple Choices
有時,服務器可能會響應多種可能的資源來滿足瀏覽器的請求。300 狀態碼意味著瀏覽器現在需要在它們之間進行選擇。當有多個可用的文件類型擴展名時,可能會發生這種情況。
(2)301 Moved Permanently
永久重定向。已為目標資源分配了一個新的永久 URI。新的 URI 會在 HTTP 響應頭中的 Location 首部字段指定。若用戶已經把原來的URI保存為書簽,此時會按照 Location 中新的URI重新保存該書簽。同時,搜索引擎在抓取新內容的同時也將舊的網址替換為重定向之后的網址。
(3)302 Found
臨時重定向。請求的資源被分配到了新的 URI,希望用戶(本次)能使用新的 URI 訪問資源。和 301 Moved Permanently 狀態碼相似,但是 302 代表的資源不是被永久重定向,只是臨時性質的。也就是說已移動的資源對應的 URI 將來還有可能發生改變。
若用戶把 URI 保存成書簽,但不會像 301 狀態碼出現時那樣去更新書簽,而是仍舊保留返回 302 狀態碼的頁面對應的 URI。同時,搜索引擎會抓取新的內容而保留舊的網址。因為服務器返回302代碼,搜索引擎認為新的網址只是暫時的。
使用場景:
未登陸的用戶訪問用戶中心重定向到登錄頁面。
訪問404頁面重新定向到首頁。
(4)303 See Other
由于請求對應的資源存在著另一個 URI,應使用 GET 方法定向獲取請求的資源。
303 狀態碼和 302 Found 狀態碼有著相似的功能,但是 303 狀態碼明確表示客戶端應當采用 GET 方法獲取資源。303 狀態碼通常作為 PUT 或 POST 操作的返回結果,它表示重定向鏈接指向的不是新上傳的資源,而是另外一個頁面,比如消息確認頁面或上傳進度頁面。而請求重定向頁面的方法要總是使用 GET。
注意:
當 301、302、303 響應狀態碼返回時,幾乎所有的瀏覽器都會把 POST 改成GET,并刪除請求報文內的主體,之后請求會再次自動發送。
301、302 標準是禁止將 POST 方法變成 GET方法的,但實際大家都會這么做。
(5)304 Not Modified
瀏覽器緩存相關。該狀態碼表示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但未滿足條件的情況。304 狀態碼返回時,不包含任何響應的主體部分。304 雖然被劃分在 3XX 類別中,但是和重定向沒有關系。
帶條件的請求(Http 條件請求):使用 Get方法 請求,請求報文中包含(if-match、if-none-match、if-modified-since、if-unmodified-since、if-range)中任意首部。
狀態碼304并不是一種錯誤,而是告訴客戶端有緩存,直接使用緩存中的數據。返回頁面的只有頭部信息,是沒有內容部分的,這樣在一定程度上提高了網頁的性能。
(6)305 Use Proxy
服務器需要代理才能返回請求的資源。此響應代碼當前未使用,因為當前大多數瀏覽器由于安全問題不支持它。
(7)307 Temporary Redirect
臨時重定向。該狀態碼與 302 Found 有著相同含義,盡管 302 標準禁止 POST 變成 GET,但是實際使用時還是用了。307 會遵守瀏覽器標準,不會從 POST 變成 GET。但是對于處理請求的行為時,不同瀏覽器還是會出現不同的情況。規范要求瀏覽器繼續向 Location 的地址 POST 內容。規范要求瀏覽器繼續向 Location 的地址 POST 內容。
(8)308 Permanent Redirect
永久重定向,當前及未來的請求重定向到了新的 URL。
4. 4xx Client errors(1)400 Bad Request
請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容后再次發送請求。
(2)401 Unauthorized
發送的請求需要有通過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證信息。若之前已進行過一次請求,則表示用戶認證失敗。返回含有 401 的響應必須包含一個適用于被請求資源的 WWW-Authenticate 首部用以質詢(challenge)用戶信息。當瀏覽器初次接收到 401 響應,會彈出認證用的對話窗口。
(3)402 Payment Required
為數字支付系統保留的。不過,它并沒有被廣泛使用。
(4)403 Forbidden
客戶端請求已被拒絕,因為客戶端無權訪問內容。與 401 不同,服務器知道客戶端的身份,但由于他們無權查看內容,因此服務器拒絕提供正確的響應。
(5)404 Not Found
服務器上無法找到請求的資源,但將來可能可用。除此之外,也可以在服務器端拒絕請求且不想說明理由時使用。
(6)405 Method Not Allowed
服務器識別到瀏覽器使用的 HTTP 請求方法,但需要使用不同的方法才能提供所需的資源。服務器應該總是允許客戶端使用 GET 和 HEAD 方法進行訪問。
客戶端可以通過 OPTIONS 方法(預檢)來查看服務器允許的訪問方法, 如下
Access-Control-Allow-Methods: GET,HEAD,PUT,PATCH,POST,DELETE
(7)406 Not Acceptable
服務器通知客戶端沒有資源符合瀏覽器請求的標準。
(8)407 Proxy Authentication Required
客戶端必須首先通過代理進行身份驗證。
(9)408 Request Timeout
當服務器在等待來自瀏覽器的完整請求時超時時會生成此狀態碼。換句話說,服務器沒有收到瀏覽器發送的完整請求。一種可能的原因就是網絡擁塞導致瀏覽器和服務器之間的數據包丟失。
(10)409 Conflict
服務器無法處理瀏覽器的請求,因為與相關資源存在沖突。這有時是由于多個同時編輯而發生的。
(11)410 Gone
請求的資源將來將不再可用。
(12)411 Length Required
請求的資源需要客戶端指定一定的長度,通過 Content-Length 來定義。
(13)412 Precondition Failed
服務器不滿足請求頭字段中指示的一個或多個先決條件。
(14)413 Payload Too Large
服務器拒絕處理請求,因為請求的負載大于服務器能夠或愿意處理的。雖然服務器可能會關閉連接以阻止客戶端繼續請求,但它應該生成一個 Retry-After 頭字段以及客戶端可以在多長時間后重試。
(15)414 Request-URI Too Long
瀏覽器發出的請求無法被服務器處理,因為客戶端將太多數據編碼為查詢字符串,然后作為 GET 方法發送。
(16)415 Unsupported Media Type
請求已被服務器拒絕,因為它不支持請求數據的媒體格式。
(17)416 Requested Range Not Satisfiable
請求的 Range 頭中指定的范圍無法滿足。原因可能是給定范圍超出了目標 URI 數據的大小。
(18)417 Expectation Failed
服務器無法滿足請求的請求頭的 Expect 字段中指定的要求。
(19)421 Misdirected Request
瀏覽器的請求已被重定向到其他服務器,該服務器無法產生響應。
(20)422 Unprocessable Entity
瀏覽器發出的請求中存在語義錯誤,服務器無法處理。
(21)423 Locked
對所需資源的訪問被拒絕,因為它已被鎖定。
(22)424 Failed Dependency
瀏覽器發出的請求失敗,因為它依賴于另一個請求,而該請求失敗了。
(23)426 Upgrade Required
當服務器拒絕使用當前協議執行給定的請求時,它可能愿意在客戶端升級到不同的協議后這來執行請求。
(24)428 Precondition Required
服務器要求在處理請求之前指定條件。
(25)429 Too Many Requests
用戶在給定的時間內發送了太多請求(速率限制)時,這是由服務器生成的。這有時可能是由于機器人或腳本試圖訪問站點而造成的。
(26)431 Request Header Fields Too Large
服務器無法處理請求,因為標頭字段太大。這可能是單個標頭字段或所有標頭字段存在問題。
(27)451 Unavailable For Legal Reasons
服務器的運營商收到了禁止訪問請求的資源的要求。
(28)499 Client closed request
當 nginx 正在處理請求時,客戶端關閉了連接,nginx 就會返回此狀態碼。
5. 5xx Server Error5XX 的響應結果表明服務器本身發生錯誤。
(1)500 Internal Server Error
服務器端在執行請求時發生了錯誤。也有可能是應用存在 bug 或某些臨時的故障。
(2)501 Not Implemented
請求無法處理,因為服務器不支持。
(3)502 Bad Gateway
該扮演網關或代理角色的服務器從上游服務器中接收到的響應是無效的。注意,502 錯誤通常不是客戶端能夠修復的,而是需要由途經的服務器或者代理服務器對其進行修復
(4)503 Service Unavailable
服務器暫時處于超負載或正在進行停機維護,現在無法處理請求。
使用場景:
服務器停機維護時,主動用503響應請求;
nginx 設置限速,超過限速,會返回503。
(5)504 Gateway Timeout
網關或者代理的服務器無法在規定的時間內獲得想要的響應。它是HTTP 1.1中新加入的。
使用場景:
代碼執行時間超時;
代碼發生了死循環。
(6)505 HTTP Version Not Supported
請求中使用的 HTTP 版本不受服務器支持。
(7)506 Variant Also Negotiates
服務器內部配置錯誤。
(8)507 Insufficient Storage
服務器無法存儲完成請求所必須的內容。
(9)508 Loop Detected
服務器在處理請求時檢測到無限循環。
(10)510 Not Extended
服務器需要進一步擴展才能滿足請求。
(11)511 Network Authentication Required
客戶端需要進行身份驗證才能獲得訪問權限。
X 關閉
X 關閉
- 15G資費不大降!三大運營商誰提供的5G網速最快?中國信通院給出答案
- 2聯想拯救者Y70發布最新預告:售價2970元起 迄今最便宜的驍龍8+旗艦
- 3亞馬遜開始大規模推廣掌紋支付技術 顧客可使用“揮手付”結賬
- 4現代和起亞上半年出口20萬輛新能源汽車同比增長30.6%
- 5如何讓居民5分鐘使用到各種設施?沙特“線性城市”來了
- 6AMD實現連續8個季度的增長 季度營收首次突破60億美元利潤更是翻倍
- 7轉轉集團發布2022年二季度手機行情報告:二手市場“飄香”
- 8充電寶100Wh等于多少毫安?鐵路旅客禁止、限制攜帶和托運物品目錄
- 9好消息!京東與騰訊續簽三年戰略合作協議 加強技術創新與供應鏈服務
- 10名創優品擬通過香港IPO全球發售4100萬股 全球發售所得款項有什么用處?