小結HTTP狀態碼
作為一個web開發工程師,我們平時都會和諸如200, 304, 404, 501
等狀態碼打交道,那麼它們是什麼意思呢?今天,我們來聊聊~
什麼是HTTP狀態碼
HTTP狀態碼是服務端返回給客戶端(因為這裡是web開發,這裡的客戶端指瀏覽器客戶端)的3位數字程式碼
。
這些狀態碼相當於瀏覽器和伺服器之間的對話資訊。它們相互溝通兩者之間的事情是正常運行了還是執行失敗了或者發生了一些其他的事情(如Continue)。瞭解狀態碼有助於你快速的診斷錯誤,減少網站的停機時間等等。
狀態碼分類
狀態碼共分為五類,以1-5數字開頭進行標識,如下:
- 1xxs - 資訊性 :伺服器正在處理請求。
- 2xxs - 成功資訊 :請求已經完成,伺服器向瀏覽器提供了預期的響應。
- 3xxs –重定向 :你的請求被重定向到了其他地方。伺服器收到了請求,但是有某種重定向。
- 4xxs – 客戶端錯誤 :客戶端發生錯誤,導致伺服器無法處理請求。
- 5xxs – 服務端錯誤 :客戶端發出了有效的請求,但是伺服器未能正確處理請求。
備註:3xxs類中的304是個奇葩,其不屬於重定向資訊提示,這個後面會講到
HTTP狀態碼大體的內容已經瞭解了,但是在具體的工作中,要用到具體的狀態碼,我們下面來展開說明下各自的一些狀態碼和工作中常用到的那些狀態碼:cat:
1xxs狀態碼
- 100 Continue :表明目前為止,所有的請求內容都是可行的,客戶端應該繼續請求,如果完成,則忽略它。
-
101 Switching Protocol
:該狀態碼是響應客戶端
Upgrade
標頭髮送的,並且指示伺服器也正在切換協議。 -
103 Early Hints
:主要用於與
Link
連結頭一起使用,以允許使用者代理在伺服器仍在準備響應時開始預載入資源。
備註:在web開發的工作中,我們都會使用封裝好的庫進行介面請求,而且瀏覽器的控制檯網路中也不會出現這類狀態碼的提示(我沒看到過:cry:),所以這一大類基本不會接觸到,瞭解一下即可。
2xxs狀態碼
-
200 OK
:請求成功。成功的含義取決於HTTP方法:
GET HEAD POST TRACE
說到了HTTP的方法,可以戳HTTP請求方法這個解析教程來了解一下。
-
201 Created
:請求已經成功,並因此建立了一個新的資源。這通常是在
PUT
或POST
請求之後傳送的響應。 - 202 Accepted :請求已經接收到,但是沒有響應,沒有結果。意味著不會有一個非同步的響應去表明當前請求的結果,預期另外的程序和服務去處理請求,或者批處理。
-
204 No Content
:伺服器成功處理了請求,但不需要返回任何實體內容,並且希望返回更新了的元資訊。遇到
複雜請求
時候,瀏覽器會發送一個OPTION
方法進行預處理返回響應。
關於複雜請求和簡單請求,可以參考這篇文章CORS非簡單請求。
- 205 Reset Content :伺服器已經成功處理了請求,但是沒有返回任何內容。與204響應不同,返回此狀態碼的響應要求請求者重置文件檢視。
備註:使用的最多的2xxs狀態碼是200和204,在遇到204狀態碼的時候,要注意一下自己發的請求是不是複雜請求。如果是複雜請求,那麼在得到204返回時,瀏覽器有沒有接受了這個請求的返回,如果沒有,要叫後端搞下相關配置了。
3xxs狀態碼
上文已經提到過,這一大類是提示重定向
,可是有一個奇葩--304,它並不是表示重定向的資訊提示,而是表示資源未被更改
。至於為什麼會被放在這個分類裡面,真不知道~(看官知道的話補充下啦):clap:
-
301 Moved Permanently
:被請求的資源已
永久
移動到新位置,並且將來任何對此資源的引用都應該使用響應返回的若干個URI之一。 -
302 Found(Previously "Moved temporarily")
:請求的資源現在
臨時
從不同的URI響應請求。由於這樣的重定向是臨時的,客戶端應當繼續向原有地址傳送以後的請求。只有在Cache-Control
或Expires
中進行了指定的情況下,這個響應才是可快取的。 -
303 See Other
:對當前的請求的響應可以在另一個URI上被找到,而且客戶端應該採用
GET
的方式訪問那個連結。這個方法的存在主要是為了允許由指令碼啟用的POST請求輸出重定向到一個新的資源。 -
304 Not Modified
:如果客戶端傳送了一個帶條件的 GET 請求且該請求已被允許,而文件的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則伺服器應當返回這個狀態碼。304 響應禁止包含訊息體,因此始終以訊息頭後的第一個空行結尾。請求的時候一般結合
If-Modified-Since
頭部使用。 -
307 Temporary Redirect
:307的意義如上302。與歷史上302不同的是
在重新發出原始請求時不允許更改請求方法
。比如,使用POST請求始終就該用POST請求。
備註:307和303已經替代了歷史上的302狀態碼,現在看到的臨時重定向的狀態碼是307。詳細內容可到維基百科上檢視。