/ 程式http

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

相關連結