Menu

Mã trạng thái HTTP

Tra cứu mọi mã trạng thái HTTP với lời giải thích dễ hiểu.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

Mã trạng thái HTTP là gì?

Mã trạng thái HTTP là những con số ba chữ số mà máy chủ trả về ở đầu mỗi response để tóm tắt chuyện gì đã xảy ra. Trình duyệt, máy khách, proxy và CDN dựa vào chúng để quyết định có lưu cache, chuyển hướng, thử lại hay hiển thị lỗi cho người dùng.

Mỗi mã trạng thái thuộc một trong năm nhóm dựa trên chữ số đầu tiên: 1xx thông tin, 2xx thành công, 3xx chuyển hướng, 4xx lỗi phía máy khách, 5xx lỗi phía máy chủ. Biết nhóm là bạn thường đoán được ý nghĩa sơ bộ ngay cả trước khi tra mã cụ thể.

Hầu hết ứng dụng chỉ dùng một nhóm mã cốt lõi nhỏ (200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 409, 422, 429, 500, 502, 503). Hiểu mỗi mã *có nghĩa là gì*, cũng như sự khác nhau giữa 401 Unauthorized và 403 Forbidden, hay giữa 301 Moved Permanently và 302 Found, là điều giúp bạn trở thành lập trình viên backend hoặc API vững vàng hơn.

Bạn sẽ học được gì khi dùng bảng tra cứu này

  • Chữ số đầu tiên luôn cho biết nhóm: 1xx thông tin, 2xx thành công, 3xx chuyển hướng, 4xx lỗi máy khách, 5xx lỗi máy chủ.
  • Mã trạng thái là *một phần của hợp đồng* mà API cung cấp: máy khách nên rẽ nhánh theo mã, chứ không phải phân tích thông báo lỗi trong body.
  • 4xx nghĩa là máy khách làm sai điều gì đó (đầu vào sai, thiếu xác thực, tài nguyên không tồn tại). 5xx nghĩa là máy chủ gặp lỗi bất kể máy khách đã làm gì.
  • Một số mã có khác biệt tinh tế: 401 vs 403, 301 vs 308, 200 vs 204, và những khác biệt đó quan trọng với việc lưu cache và thử lại.

Cách dùng bảng tra cứu mã trạng thái từng bước

  1. Tìm theo mã hoặc tên

    Gõ một con số (404, 429) hoặc từ khóa (auth, redirect, rate limit) và các mã phù hợp sẽ được lọc ngay lập tức.

  2. Lọc theo nhóm

    Dùng các nút chọn nhóm (1xx, 2xx, 3xx, 4xx, 5xx) để thu hẹp danh sách khi bạn đang khám phá thay vì tìm kiếm.

  3. Đọc phần giải thích dễ hiểu

    Mỗi mục cho biết khi nào mã được gửi, máy khách thường xử lý ra sao và nguyên nhân phổ biến nhất.

  4. So sánh các mã liên quan

    Dùng các liên kết xem thêm giữa những cặp mã dễ nhầm (401 vs 403, 301 vs 302) để chọn đúng mã cho API của bạn.

Các nhóm mã trạng thái HTTP

Năm nhóm mã trạng thái HTTP và ý nghĩa của chúng trong nháy mắt. Được định nghĩa trong RFC 9110 và đăng ký trong IANA HTTP Status Code Registry.

NhómÝ nghĩaMã phổ biến
1xx Thông tinĐã nhận request, đang xử lý100, 101, 103
2xx Thành côngRequest đã thành công200, 201, 204, 206
3xx Chuyển hướngTìm ở nơi khác301, 302, 304, 307, 308
4xx Lỗi máy kháchRequest có vấn đề400, 401, 403, 404, 409, 422, 429
5xx Lỗi máy chủMáy chủ không xử lý được một request hợp lệ500, 502, 503, 504

Các mã trạng thái HTTP phổ biến cần biết

200 OK vs 201 Created vs 204 No Content

200 OK

Response tiêu chuẩn cho "mọi thứ đều ổn", có kèm body.

201 Created

Một tài nguyên mới đã được tạo nhờ request này, thường là sau một lệnh POST.

204 No Content

Thành công nhưng không có body. Thường gặp sau các lệnh gọi DELETE hoặc PUT không cần trả về dữ liệu.

Cả ba đều là mã thành công, khác nhau ở nội dung mà response mang theo. 201 nên kèm header Location trỏ tới tài nguyên mới; 204 theo định nghĩa là rỗng.

301 Moved Permanently vs 302 Found

301

Chuyển hướng vĩnh viễn. Trình duyệt và công cụ tìm kiếm ghi nhớ nó; URL cũ coi như không còn dùng.

302

Chuyển hướng tạm thời. Trình duyệt kiểm tra lại URL gốc ở mỗi request; dấu trang vẫn giữ URL cũ.

Dùng 301 khi bạn thật sự đã chuyển một tài nguyên (đổi thương hiệu, cấu trúc lại URL). Dùng 302 cho các chuyển hướng ngắn hạn như A/B test, chuyển hướng đăng nhập hoặc trang bảo trì.

401 Unauthorized vs 403 Forbidden

401

Bạn chưa được xác thực. Máy chủ không biết bạn là ai.

403

Máy chủ biết bạn là ai, nhưng bạn không có quyền với tài nguyên này.

Nếu gửi thông tin xác thực khác có thể giải quyết vấn đề, hãy trả về 401. Nếu không thông tin xác thực nào giúp được (tài nguyên đơn giản là bị cấm với người dùng này), hãy trả về 403.

500 vs 502 vs 503 vs 504

500

Lỗi máy chủ chung: code của bạn ném ra một ngoại lệ không được xử lý.

502

Bad gateway: một proxy phía trước (CDN, bộ cân bằng tải) không kết nối được tới máy chủ upstream.

503

Dịch vụ không khả dụng: máy chủ vẫn chạy nhưng đang quá tải hoặc ở chế độ bảo trì.

504

Gateway timeout: một proxy đã kết nối tới upstream nhưng không nhận được response kịp thời.

Cả bốn đều là lỗi máy chủ, nhưng chúng kể cho người gỡ lỗi những câu chuyện rất khác nhau. 500 là do ứng dụng của bạn; 502 và 504 chỉ vào đường truyền mạng; 503 chỉ vào năng lực xử lý.

Lỗi thường gặp với mã trạng thái HTTP

  • Trả về 200 OK kèm {"error": "..."} trong body. Mã trạng thái là một phần của hợp đồng: hãy dùng đúng mã (400, 404, 500) để máy khách rẽ nhánh theo nó.
  • Dùng 401 cho lỗi phân quyền. 401 dành cho xác thực; từ chối quyền truy cập là 403.
  • Dùng 200 cho tài nguyên mới tạo thay vì 201 kèm header Location.
  • Trả về 404 khi truy cập trái phép. Cách này che giấu tài nguyên khỏi việc dò quét, nhưng cũng làm rối các máy khách có quyền truy cập hợp lệ. 403 thường rõ ràng hơn.
  • Nhầm 429 Too Many Requests với 503 Service Unavailable. Dùng 429 cho giới hạn tần suất theo từng máy khách, 503 cho tình trạng quá tải toàn hệ thống.

Câu hỏi thường gặp về mã trạng thái HTTP

Lỗi HTTP 404 là gì?
404 Not Found nghĩa là máy chủ hiểu request nhưng tài nguyên ở URL đó không tồn tại. Thường là do đường dẫn sai, tài nguyên đã bị xóa hoặc URL bị gõ nhầm.
401 và 403 khác nhau thế nào?
401 Unauthorized nghĩa là bạn chưa được xác thực: máy chủ không biết bạn là ai. 403 Forbidden nghĩa là bạn đã được xác thực nhưng không có quyền với tài nguyên. Gửi thông tin xác thực khác có thể sửa được 401; nhưng không sửa được 403.
301 và 302 khác nhau thế nào?
301 Moved Permanently là chuyển hướng vĩnh viễn: trình duyệt và công cụ tìm kiếm cập nhật lại thông tin. 302 Found là chuyển hướng tạm thời: máy khách vẫn tiếp tục truy cập URL gốc. Dùng 301 khi chuyển hẳn, 302 khi chỉ đi đường vòng tạm thời.
Lỗi HTTP 500 là gì?
500 Internal Server Error là lỗi chung phía máy chủ, thường xảy ra khi một ngoại lệ không được xử lý lan lên trên. Máy khách không làm gì sai: máy chủ của bạn không xử lý được một request hợp lệ.
Có nên luôn dùng mã trạng thái cụ thể không?
Có. Dùng 200 OK chung chung cho lỗi hoặc 500 cho mọi vấn đề khiến API khó dùng hơn. Hãy chọn mã cụ thể nhất phù hợp: máy khách, proxy, công cụ giám sát và logic thử lại đều rẽ nhánh theo mã trạng thái.
Lỗi HTTP 429 là gì?
429 Too Many Requests được gửi khi máy khách chạm giới hạn tần suất. Response nên kèm header Retry-After cho máy khách biết khi nào có thể thử lại an toàn.
Lỗi HTTP 403 Forbidden là gì?
403 Forbidden nghĩa là máy chủ hiểu request và biết bạn là ai, nhưng từ chối cho bạn truy cập tài nguyên. Khác với 401, xác thực lại không giúp được gì: tài khoản của bạn đơn giản là không có quyền. Nguyên nhân thường gặp là thiếu vai trò hoặc scope, danh sách IP được phép, hoặc tài nguyên là riêng tư của người dùng khác.
Lỗi HTTP 502 Bad Gateway là gì?
502 Bad Gateway nghĩa là một máy chủ đóng vai trò proxy hoặc gateway (CDN, bộ cân bằng tải hoặc reverse proxy) nhận được response không hợp lệ hoặc rỗng từ máy chủ upstream mà nó chuyển tiếp request của bạn tới. Lỗi này thường cho thấy backend đang sập, bị crash hoặc cấu hình sai, chứ không phải do request của bạn.
Có bao nhiêu mã trạng thái HTTP?

Có năm nhóm (từ 1xx đến 5xx) và khoảng 60 mã chuẩn được đăng ký với IANA, dù phần lớn hiếm khi được dùng. Trên thực tế, công việc phát triển web và API hằng ngày dựa vào khoảng 15 đến 20 mã cốt lõi: 200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 409, 422, 429, 500, 502 và 503. Danh sách tra cứu phía trên có đủ mọi mã chuẩn kèm mô tả dễ hiểu.

Tìm hiểu thêm

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu