常見的 HTTP Status Codes

前言

網頁開發做久了, 自然而且會接觸到許多 status code. 這篇列出一些常見的 status code. 初學者可以把它們學上來. 真的很常見哦.

 

參考

Wikipedia – List of HTTP status codes

 

2xx

2xx 的 codes 都屬於成功的 request.

200 – OK, 正常返回. 最常見

201 – Created, restful create resource, post 成功後會返回 201, 會附帶 created resource 的 url.

204 – No Content,  restful update / delete resource, put / delete 成功後會返回 204

 

3xx

3xx 的 codes 都表示跳轉. 但它不代表 request fail 哦, 只是地址換了, 或者 succeed 後帶你去 thank you 頁面這種都是 3xx 的範疇.

301 – Moved Permanently, 如果地址永久換了就返回這個 (SEO 很常用)

302 – Found, 如果只是暫時換地址那就用 302 (SEO 很常用)

303 – See Other, 某種情況下取代了 302. 下面會講細節

304 – Not Modified

比如 client 要下載一個很大的資源, request 的時候就可以問 server If-Modified-Since, server 就明白 client 有緩存, 但擔心過期.

如果這時資源沒有改動, 那就可以返回 304. 這樣 client 就不用重新下載, 直接用緩存即可.

307 – Temporary Redirect, 某種情況下取代了 302, 下面會講細節

308 – Permanent Redirect, 某種情況下取代了 301, 下面會講細節

302, 303, 307 和 301, 308 的關係

它們關係密切而且有歷史包袱, 所以有點亂.

參考: 知乎 – HTTP 中的 301、302、303、307、308 響應狀態碼

最早的時候只有 301, 302

1 個 POST request 被返回 302, by right 應該繼續用 POST, 但是很多遊覽器會改成 GET. 這和規範有衝突, 但遊覽器沒有打算改

於是規範就出了 303 和 307 替代 302. 

303 表示不管怎樣, 返回後用 GET 去拿

307 則要求 client (遊覽器) 不可以將 POST 換成 GET.

有了 303 和 307 以後, 302 其實就沒用了, 但要向後兼容所以也不可能丟掉它, 於是規範就改了

302 就是會把 POST 換成 GET.

301 也是同樣的問題, POST 會變成 GET, 308 則不會.

小總結 

如果只考慮 GET, 那麼用 301, 302 可以了.

如果不在乎 POST 變成 GET, 那麼用 301, 302 可以了

如果你想強調 POST 變成 GET, 那麼用 303

如果你不想 POST 變成 GET, 那麼用 307, 308

 

4xx

4xx 屬於 fail request. 通常是那些預料的到的 error, 而不是 server down 那種完全 unexpected 的.

400 Bad Request, 常用於 validation 不過關的返回, 比如 required 的 property 沒有 value. 就可以返回 400.

401 Unauthorized, 沒有登錄, 無法訪問到受保護的資源

403 Forbidden, 登入了, 但是權限不夠, 無法訪問到受保護的資源.

404 Not Found, 找不到資源. 這個是最常見的了.

405 Method Not Allowed, 某個地址是 handle POST request 的, 結果 client 發了 GET. 我用 Postman 做 Web API 測試時, 經常忘記選 Method, 所以常看到這個 error.

406 Not Acceptable, client request 的時候會在 header 表面能接受的資源返回格式, 如果 server 發現 response 的格式沒有在能接受的範圍內就會返回 406

408 Request Timeout, server 會 set 一個時間, 如果 request 處理太久就會直接返回 408.

415 Unsupported Media Type, server 不接受 client post 的內容格式, 和 405 有點反過來的味道.

429 Too Many Requests, client 在很短的時候見發了太多的請求. .NET 7 正好出了這樣一個限制 feature Youtube – The NEW Rate Limiter of .NET 7 is AWESOME

 

5xx

5xx 屬於 server unexpected error. 通常發生就要找 IT support 看看了.

500 Internal Server Error. 通常是程序有 Bug

503 Service Unavailable, server 完全 down 了

 

總結

上面都是比較常見的.如果是初學者, 我覺得至少要懂 200, 301, 302, 401, 403, 404, 500, 503.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章