常見與不常見的 HTTP Status Code
HTTP Status Code 用來表明一個 HTTP Request 是否完成,寫 API 的時候會一直用到。但你知道除了基本的 404、500 以外,還有很多常用、甚至是非官方的 HTTP Status Code 嗎?
HTTP Status Code 用來表明一個 HTTP Request 是否完成,寫 API 的時候會一直用到。但你知道除了基本的 404、500 以外,還有很多常用、甚至是非官方的 HTTP Status Code 嗎?
↑ 常見的 404 錯誤。
什麼是 HTTP Status Code
基本上,我們網路上傳送東西的時候,就是使用者(Client 端)發送一個 Request(請求),接著伺服器(Server 端)處理請求,並回傳一個 Response(回應)。為了避免程式設計師看心情回應,當年好像是 RFC 2616 有定義了這些回應(當然後來還有其他擴充啦。RFC 也是個好玩的東西,之後再來講 XD),像是常見的 404 Not Found、500 Internal Server Error。
常見的 HTTP Status Code
回應主要分為五種:1XX 資訊回應、2XX 成功回應、3XX 重定向、4XX 用戶端錯誤、5XX 伺服器端錯誤,下面列舉一些常見的:
- 200 OK:成功,很棒。
- 301 Moved Permanently:已永久移動到新位置。
- 302 Found(Moved Temporarily):暫時移到新位置。
- 304 Not Modified:東西跟之前長一樣,可以從快取拿就好。
- 400 Bad Request:明顯的用戶端錯誤,伺服器無法處理這個 Request。
- 401 Unauthorized:未認證,可能需要登入或 Token。
- 403 Forbidden:沒有權限。
- 404 Not Found:找不到資源。
- 418 I’m a teapot:我是一個茶壺,不會泡咖啡。
- 500 Internal Server Error:伺服器端錯誤。
- 502 Bad Gateway:通常是伺服器的某個服務沒有正確執行。
- 503 Service Unavailable:伺服器臨時維護或是快掛了,暫時無法處理請求。
- 504 Gateway Timeout:伺服器上的服務沒有回應。
其他可以在維基百科上的 HTTP 狀態碼查到。等等,你說 HTTP 418 是什麼?我是一個茶壺?
HTTP 418 是 1998 年訂的愚人節笑話(收錄在 RFC 2324),指當一個控制茶壺的伺服器收到要求煮咖啡的 Request 時候,要回應 418,告訴使用者這是一個茶壺不是咖啡機 XD!
非官方的 HTTP Status Code
剩下一些比較常看到的非官方 Status Code:
- 420 Enhance Your Calm:據說早期 Twitter API 會在短期內送出太多需求的時候回傳這個 Status Code,不過在新版 API 改為使用 429 Too Many Requests。
- 498 Invalid Token
- 499 Token Required:這兩個是以前一個叫做 ArcGIS for Server 的系統會回應的 Status Code。一般來說驗證資訊錯誤還是會回傳 401 Unathorized。
- 520 Unknown Error:Cloudflare 會用的未知錯誤。
- 521 Web Server Is Down:指目標伺服器掛了。
英文版的維基百科 List of HTTP status code 有將這些非官方的 Status Code 收錄進去。
那為什麼可以有這麼多自己定義的 HTTP Status Code 呢?因為 RFC 2616 有提到:HTTP status code 是可以被擴充的(extensible),應用程式不需要知道所有的 Status Code 代表什麼意思,但是需要知道他的分類:例如當收到 431 Response 的時候,雖然不知道那是什麼,但可以猜出應該是使用者端(Client)的錯誤。
非官方惡搞的 HTTP Status Code
既然 HTTP Status Code 可以被擴充,當然就會有其他人惡搞:
- 622 All The Fucks:Server invites you to consider the truly monumental amount of fucks it couldn’t give about your request.
這是一個叫 FOAAS(Fuck Off As A Service)的服務,用 RESTful 的方式、可擴充的解法解決平常叫人滾開(Fuck Off) 的問題。還有人用 JS、PHP、.NET、Java、Go 語言等擴充了這個服務。
另外還有人定義了 7xx-rfc,表示工程師有很多方法搞砸他們寫的服務,但現有的 HTTP Status Code 無法完美回應給使用者這些錯誤。下面列一些我覺得比較好玩的:
- 705 I wrote the code and missed the necessary validation by an oversight(程式我寫的,而且我疏忽忘記寫必要的驗證了)
- 718 I am not a teapot(我不是一個茶壺)
- 725 It works on my machine(在我的電腦上跑得動)
- 726 It’s a feature, not a bug(這是一個功能,不是錯誤)
- 730 Fucking Bower(去你的 Bower,Bower 是個前端套件)
- 735 Fucking IE(去你的 IE)
- 739 Fucking Windows(去你的 Windows)
- 740 Computer says no(電腦說不)
- 741 Compiling(正在編譯)
- 742 A kitten dies(一隻小貓死了)
- 743 I thought I knew regular expressions(我想我知道正規表示法)
- 747 Motherfucking Snakes on the Motherfucking plane(他媽的蛇在他媽的飛機上)
- 755 Not enough semi-colons(分號不夠)
- 764 Over-Caffeinated(太多咖啡因了)
- 767 Drunk(喝醉了)
- 777 Coincidence(巧合)
- 786 Try it now(現在試試看)
- 788 Designer’s final designs weren’t(設計師的最終設計不是這個)
- 797 This is the last page of the Internet. Go back(這是整個網際網路的最後一頁,回上一頁吧)
- 799 End of the world(世界末日)
當然到後面這些東西都是半搞笑的了,不過 HTTP Status Code 真的是個不可或缺的東西呢!還有什麼其他好玩的 Status Code 嗎?
相關連結
- RFC 2616(HTTP Status)
- HTTP 狀態碼 – 維基百科
- RFC 2324(418 I’m a teapot)
- List of HTTP status code – Wikipedia
- tomdionysus/foaas – GitHub
- joho/7XX-rfc – GitHub