本文為 AJAX 基本介紹系列文,第 2 篇:
你有沒有在瀏覽網頁時看過「404」或「500 錯誤」?這些數字到底是什麼意思?
簡單來說,狀態碼就是伺服器給你的「回覆訊息」。就像你傳訊息給朋友,朋友會回「收到」、「我不在」或「你傳錯人了」一樣,伺服器也會用這些數字告訴你:請求成功了、失敗了、還是要你去別的地方找。
這篇文章會用最白話的方式,帶你認識這些常見的狀態碼,讓你以後看到錯誤訊息不再一頭霧水!
狀態碼長怎樣?先看開頭數字就對了
狀態碼都是三位數,而且只要看「第一個數字」,你就能大概知道發生什麼事:
| 開頭數字 | 代表意思 | 白話翻譯 |
|---|---|---|
| 1xx | 處理中 | 「等一下喔,我還在忙」 |
| 2xx | 成功 | 「OK,搞定了!」 |
| 3xx | 轉址 | 「你要找的東西搬家了,去這裡找」 |
| 4xx | 你的問題 | 「你搞錯了,不是我的錯喔」 |
| 5xx | 伺服器的問題 | 「抱歉,是我這邊出包了」 |
接下來我們一個一個來看!
1xx 系列:處理中(很少見)
這系列你幾乎不會遇到,就是伺服器跟你說「收到了,正在處理」。
跳過,不用太在意。
2xx 系列:成功!沒問題!
這是最開心的狀態碼,代表一切順利。
200 OK
最常見的成功碼。意思就是:「你要的東西,我給你了。」
你每次正常開啟網頁,背後都是回傳 200。
201 Created(已建立)
新增資料成功!通常在你「新增」東西的時候會收到這個。
比喻:你去戶政事務所辦新的身分證,櫃台跟你說「好了,幫你建檔完成,這是你的新證件。」
常見情境:
- 註冊新帳號成功
- 發表一篇新文章
- 新增一筆訂單
跟 200 的差別是:200 是「我給你資料」,201 是「我幫你新建了一筆資料」。
204 No Content(成功,但沒東西給你)
操作成功了,但伺服器沒有東西要回傳給你。
比喻:你請同事幫你刪掉某個檔案,同事說「刪好了」,然後就沒有然後了——因為東西都刪掉了,沒什麼好給你看的。
常見情境:
- 刪除資料成功(DELETE 請求)
- 更新資料成功,但不需要回傳內容
- 按了「儲存」,後端存好了但不用回傳東西
重點是:沒有回傳內容不代表失敗,204 就是在說「搞定了,但我沒東西要給你」。
3xx 系列:轉址(東西搬家了)
這系列的意思是:「你要找的東西不在這裡,但我告訴你去哪裡找。」
301 vs 302:永久搬家 vs 暫時不在
這兩個超級常見,一定要搞懂差別!
301:永久轉址(搬家了,不會回來)
情境比喻:
你去大樓找小明,警衛跟你說:
「小明已經從 4 樓搬到 6 樓了,以後都去 6 樓找他。」
這就是 301。小明永久搬家了,以後你都應該直接去 6 樓。
實際應用:
- 網站換網址了(例如從
old-site.com換到new-site.com) - 對 SEO 很重要,搜尋引擎會記住新地址
302:暫時轉址(只是暫時不在)
情境比喻:
你去大樓找小明,警衛跟你說:
「小明現在在 301 會議室開會,你可以去那邊找他,但開完會他會回辦公室。」
這就是 302。小明只是暫時不在位置上,之後還是會回來。
實際應用:
- 網站維護中,暫時導到別的頁面
- 促銷活動期間,暫時轉到活動頁
一句話記住差別
| 狀態碼 | 一句話 |
|---|---|
| 301 | 「我搬家了,以後來新地址找我」 |
| 302 | 「我暫時不在,等等就回來」 |
4xx 系列:你搞錯了(用戶端錯誤)
這系列代表問題出在「你」這邊,不是伺服器的錯。
400 Bad Request(請求格式錯誤)
你送出的請求伺服器看不懂。
比喻:你去麥當勞說「我要一份藍色的漢堡」,店員會說「蛤?你在說什麼?」
401 Unauthorized(沒有登入)
你沒有通過身份驗證,伺服器不知道你是誰。
比喻:你想進公司大樓,但沒帶員工證,警衛說「請先出示證件,我不知道你是誰」。
403 Forbidden(禁止存取)
你有登入,但你沒有權限看這個東西。
比喻:你刷了員工證進公司,但你想進機房,門禁系統說「你不是 IT 部門的,不能進」。
404 Not Found(找不到)
最有名的錯誤碼!代表你要的頁面不存在。
比喻:你去圖書館找一本書,圖書館員說「我們沒有這本書」。
常見原因:
- 網址打錯了
- 頁面被刪除了
- 連結過期了
5xx 系列:伺服器出包了
這系列代表問題出在伺服器那邊,不是你的錯。遇到這種情況,通常只能等網站修好。
500 Internal Server Error(內部錯誤)
伺服器內部發生不明錯誤,沒辦法處理你的請求。
比喻:你去餐廳點餐,廚房突然失火了,店員跑出來說「抱歉,我們內部出了點問題」。
常見原因:
- 程式碼有 bug
- 資料庫連線出問題
- 伺服器設定錯誤
這是工程師最怕看到的錯誤碼,因為原因可能很多,需要去看 log 才知道。
502 Bad Gateway(閘道錯誤)
伺服器之間的溝通出問題了。
這是什麼意思? 現代網站通常不是只有一台伺服器,而是有很多層,例如:
你的瀏覽器 → 反向代理(Nginx)→ 應用伺服器(你的網站程式)
502 代表「反向代理」連不到後面的「應用伺服器」。
比喻:你打電話給公司總機,總機說「抱歉,我轉接不到那個分機,線路好像斷了」。
常見原因:
- 應用伺服器掛掉了
- 反向代理設定錯誤
- DNS 解析出問題,找不到後端伺服器
504 Gateway Timeout(閘道逾時)
反向代理等後端伺服器等太久,等到放棄了。
比喻:你打電話給公司總機,總機幫你轉接,但那邊一直沒人接,等了 30 秒後總機說「抱歉,對方沒有回應」。
常見原因:
- 後端伺服器太忙,來不及回應
- 某個程式執行太久(例如查詢很大的資料庫)
- 網路連線不穩定
502 vs 504 的差別
| 狀態碼 | 白話說明 |
|---|---|
| 502 | 「連線斷掉了,根本連不上」 |
| 504 | 「有連上,但對方太久沒回應,我放棄了」 |
彩蛋:418 I’m a teapot(我是茶壺)
這是一個真實存在但超搞笑的狀態碼!
由來
1998 年愚人節,有人開玩笑提出一個「超文本咖啡壺控制協議」(HTCPCP),裡面規定:如果你叫一個茶壺幫你泡咖啡,它應該回傳 418,意思是「我是茶壺,我不會泡咖啡」。
實際用途
沒有。這純粹是工程師的幽默。但它已經被寫進正式文件,成為網路文化的一部分。
有些網站會特別做一個 418 頁面,當作彩蛋讓人發現。
常見狀態碼速查表
| 狀態碼 | 名稱 | 白話翻譯 |
|---|---|---|
| 200 | OK | 成功,一切正常 |
| 201 | Created | 新增成功,幫你建好了 |
| 204 | No Content | 成功,但沒東西給你 |
| 301 | Moved Permanently | 永久搬家了 |
| 302 | Found | 暫時不在這裡 |
| 400 | Bad Request | 你的請求我看不懂 |
| 401 | Unauthorized | 請先登入 |
| 403 | Forbidden | 你沒有權限 |
| 404 | Not Found | 找不到這個頁面 |
| 500 | Internal Server Error | 伺服器內部爆炸了 |
| 502 | Bad Gateway | 伺服器之間連線斷了 |
| 504 | Gateway Timeout | 伺服器回應太慢,逾時了 |
| 418 | I’m a teapot | 我是茶壺(搞笑用) |
總結
學會看狀態碼,除錯會變得更有效率:
- 看到 4xx:先檢查自己的請求對不對(網址、參數、權限)
- 看到 5xx:問題在伺服器,去看 log 或等網站修復
- 看到 3xx:資源搬家了,跟著轉址走就好
- 看到 2xx:恭喜,一切順利!
下次再看到錯誤頁面,你就知道發生什麼事了!
延伸學習
想要查詢更多狀態碼,可以參考:
- MDN Web Docs – HTTP 狀態碼
- HTTP Cats(用貓咪圖片解釋每個狀態碼,超可愛)