Intro - No stand alone

HTTP status codes — bảng tra cứu mã trạng thái HTTP đầy đủ

Admin
May 31, 2026
8 phút đọc
0

Bạn gọi API và nhận về 403. Là lỗi gì? Sai token hay bị block hẳn? Còn 422 khác 400 ở chỗ nào? Và tại sao có khi redirect lại dùng 301, có khi lại 302? Nếu bạn đã từng phân vân với những câu hỏi đó — trang này là tài liệu tham khảo nhanh bạn cần bookmark lại ngay.

HTTP status code là gì?

HTTP Status Code là mã số 3 chữ số mà server trả về trong mỗi HTTP response để cho client biết kết quả của request. Mã này được chuẩn hoá bởi IETF (RFC 9110) và được dùng thống nhất trên toàn bộ internet — từ trình duyệt, API, CDN cho đến load balancer.

Cấu trúc của một HTTP response bao giờ cũng có status code ở dòng đầu tiên, ví dụ: HTTP/1.1 200 OK hay HTTP/2 404 Not Found. Client (trình duyệt, mobile app, script…) đọc mã này để quyết định xử lý response như thế nào tiếp theo.

Toàn bộ status code được chia thành 5 nhóm theo chữ số đầu tiên:

NhómPhạm viÝ nghĩa chung
1xx100–199Informational — Request đang được xử lý, chờ thêm
2xx200–299Success — Request thành công
3xx300–399Redirection — Cần thêm hành động để hoàn tất
4xx400–499Client Error — Lỗi từ phía client
5xx500–599Server Error — Lỗi từ phía server

Nhóm 2xx — thành công

Đây là những gì bạn muốn thấy — server đã nhận, hiểu và xử lý thành công request.

TênÝ nghĩa & khi nào dùng
200OKRequest thành công. Mã phổ biến nhất — dùng cho GET, PUT, PATCH trả về dữ liệu.
201CreatedResource mới được tạo thành công. Dùng sau POST tạo mới dữ liệu — nên kèm header Location trỏ đến resource vừa tạo.
202AcceptedRequest được chấp nhận nhưng chưa xử lý xong (async). Dùng cho các tác vụ nền như gửi email, export file lớn.
204No ContentThành công nhưng không có body trả về. Dùng sau DELETE hoặc PUT/PATCH không cần trả dữ liệu.
206Partial ContentTrả về một phần nội dung — dùng cho download từng chunk, video streaming với Range request.

Nhóm 3xx — redirect

Server yêu cầu client truy cập đến URL khác. Chọn sai mã redirect ảnh hưởng đến SEO và caching.

TênÝ nghĩa & khi nào dùng
301Moved PermanentlyURL cũ đã chuyển vĩnh viễn sang URL mới. Trình duyệt và Google sẽ cache và cập nhật index. Dùng khi migrate domain hoặc đổi cấu trúc URL.
302Found (Moved Temporarily)Chuyển tạm thời — client không nên cache. Dùng cho redirect sau khi login, A/B testing, maintenance.
304Not ModifiedResource không thay đổi kể từ lần cache cuối. Client dùng bản cache đang có — tiết kiệm bandwidth. Cơ chế của ETag và Last-Modified.
307Temporary RedirectGiống 302 nhưng bắt buộc giữ nguyên HTTP method (POST redirect vẫn là POST). Dùng khi method quan trọng.
308Permanent RedirectGiống 301 nhưng giữ nguyên method. Dùng thay 301 khi cần đảm bảo POST không bị chuyển thành GET.

Nhóm 4xx — lỗi từ phía client

Client gửi request sai — sai URL, sai dữ liệu, thiếu quyền, hoặc request không được phép.

TênÝ nghĩa & khi nào dùng
400Bad RequestRequest sai cú pháp hoặc dữ liệu không hợp lệ — server không thể hiểu. Dùng khi thiếu field bắt buộc, sai kiểu dữ liệu ở mức parse.
401UnauthorizedChưa xác thực — cần đăng nhập hoặc cung cấp token hợp lệ. Tên gọi hơi misleading: thực ra là unauthenticated, không phải unauthorized.
403ForbiddenĐã xác thực nhưng không có quyền truy cập resource này. Khác 401 ở chỗ: server biết bạn là ai, nhưng vẫn từ chối.
404Not FoundResource không tồn tại tại URL này. Mã nổi tiếng nhất internet. Cũng có thể dùng thay 403 khi muốn ẩn sự tồn tại của resource.
405Method Not AllowedHTTP method không được hỗ trợ — ví dụ gửi DELETE đến endpoint chỉ chấp nhận GET. Nên kèm header Allow liệt kê method hợp lệ.
408Request TimeoutClient gửi request quá chậm, server hết kiên nhẫn ngắt kết nối.
409ConflictRequest xung đột với trạng thái hiện tại của resource — ví dụ tạo user với email đã tồn tại, hoặc version conflict khi update đồng thời.
410GoneResource đã tồn tại nhưng bị xóa vĩnh viễn — khác 404 ở chỗ khẳng định chắc chắn đã bị xóa, không phải chưa bao giờ tồn tại.
422Unprocessable EntityRequest đúng cú pháp nhưng dữ liệu không hợp lệ về mặt logic — ví dụ email sai định dạng, số âm khi cần số dương. Phổ biến trong REST API validation.
429Too Many RequestsClient gửi quá nhiều request trong thời gian ngắn — bị rate limiting. Nên kèm header Retry-After cho biết chờ bao lâu.

Nhóm 5xx — lỗi từ phía server

Request hợp lệ nhưng server gặp sự cố khi xử lý — đây là lỗi cần developer fix phía backend.

TênÝ nghĩa & khi nào dùng
500Internal Server ErrorLỗi chung phía server — exception không được handle, bug trong code. Đây là mã bạn không bao giờ muốn thấy trên production.
501Not ImplementedServer không hỗ trợ chức năng cần thiết để xử lý request — thường dùng cho tính năng chưa phát triển.
502Bad GatewayServer đóng vai proxy/gateway nhận response không hợp lệ từ upstream server. Thường gặp khi app server bị crash hoặc khởi động lại.
503Service UnavailableServer tạm thời không khả dụng — quá tải hoặc đang maintenance. Nên kèm header Retry-After.
504Gateway TimeoutProxy/gateway không nhận được response từ upstream trong thời gian cho phép. Khác 502: không phải response sai, mà là không có response.

Phân biệt các cặp dễ nhầm

Cặp dễ nhầmĐiểm khác biệt mấu chốt
400 vs 422400: request sai cú pháp, server không parse được. 422: parse được nhưng dữ liệu sai logic (validation error).
401 vs 403401: chưa đăng nhập (unauthenticated). 403: đã đăng nhập nhưng không có quyền (unauthorized).
404 vs 410404: không tìm thấy (có thể chưa tồn tại hoặc đã xóa). 410: chắc chắn đã tồn tại và đã bị xóa vĩnh viễn.
301 vs 302301: redirect vĩnh viễn — Google chuyển link juice, trình duyệt cache. 302: redirect tạm thời — không cache, Google giữ index trang gốc.
502 vs 504502: upstream trả response sai/lỗi. 504: upstream không trả response (timeout).

Kết luận

Hiểu đúng HTTP status code không chỉ giúp bạn debug nhanh hơn mà còn giúp thiết kế API chuẩn hơn — trả đúng mã cho đúng tình huống là một phần của good API design. Bookmark trang này để tra cứu nhanh mỗi khi cần.

Khám phá thêm các tool hữu ích tại codetuthub.com/tools.

Toàn Nguyễn
Toàn NguyễnTác giả

Tác giả tại CodeTutHub

Xin chào, mình là Toàn 👋
Là Senior Full-Stack Developer ở HCM, đồng thời là người đứng sau CodeTutHub. Mình viết về những gì mình thực sự dùng hàng ngày — từ Laravel, Next.js, đến cách workflow lập trình với AI agents như Claude Code và Cursor.
Nếu bạn thấy bài này hữu ích, hãy subscribe newsletter hoặc kết nối với mình. Mình luôn sẵn sàng thảo luận về dự án thú vị, cơ hội remote, hoặc đơn giản là chat về tech.
Ho Chi Minh City · Open for collaboration

0 Bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!
Đang trả lời
Xoá bình luận

Bạn có chắc muốn xoá bình luận này?
Hành động này không thể hoàn tác.

Thông báo hệ thống
Thông tin