常見與不常見的 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