nicetool.dev logo

Mã trạng thái HTTP

Tìm theo số hoặc tên, hoặc lọc theo nhóm. Mỗi mã có liên kết tới đặc tả.

1xx Thông tin

Request đã được nhận và quá trình tiếp tục. Hiếm khi thấy trong code ứng dụng.

100

Continue

Server đã nhận header của request và client có thể gửi phần thân. Dùng với "Expect: 100-continue" trước khi upload dung lượng lớn.

RFC 9110
101

Switching Protocols

Server đồng ý chuyển giao thức theo yêu cầu của client, ví dụ từ HTTP/1.1 sang WebSocket.

RFC 9110
102

Processing

WebDAV: server đã nhận request và vẫn đang xử lý, nên client không nên ngắt vì quá thời gian.

RFC 2518
103

Early Hints

Gửi sớm các header Link để trình duyệt tải trước CSS hay font trong lúc server chuẩn bị phản hồi chính.

RFC 8297

2xx Thành công

Request đã được nhận, hiểu và chấp nhận.

200

OK

Request thành công. Phần thân chứa tài nguyên được yêu cầu hoặc kết quả của thao tác.

RFC 9110
201

Created

Một tài nguyên mới đã được tạo, thường sau POST. Header Location nên trỏ tới tài nguyên đó.

RFC 9110
202

Accepted

Request đã được nhận để xử lý nhưng chưa xong, ví dụ một tác vụ nền đang chờ trong hàng đợi.

RFC 9110
203

Non-Authoritative Information

Phản hồi thành công nhưng đã bị một proxy biến đổi, nên không hoàn toàn giống bản server gốc gửi.

RFC 9110
204

No Content

Thành công nhưng không có nội dung trả về. Hay dùng cho DELETE hoặc lưu form mà không tải lại trang.

RFC 9110
205

Reset Content

Thành công; client nên đặt lại form hoặc giao diện đã gửi request.

RFC 9110
206

Partial Content

Chỉ trả về một phần tài nguyên theo header Range. Dùng cho tải xuống tiếp tục được và tua video.

RFC 9110
207

Multi-Status

WebDAV: phần thân chứa nhiều mã trạng thái cho nhiều thao tác.

RFC 4918
208

Already Reported

WebDAV: các thành phần đã liệt kê trước đó trong phản hồi không được lặp lại.

RFC 5842
226

IM Used

Server đã áp dụng delta encoding cho phản hồi. Rất hiếm khi dùng.

RFC 3229

3xx Chuyển hướng

Cần thêm một bước, thường là đi tới URL khác, để hoàn tất request.

300

Multiple Choices

Có nhiều phiên bản của tài nguyên (ví dụ ngôn ngữ hay định dạng) và client nên chọn một.

RFC 9110
301

Moved Permanently

Tài nguyên đã chuyển vĩnh viễn sang URL mới ghi trong Location. Công cụ tìm kiếm chuyển thứ hạng sang URL mới.

RFC 9110
302

Found

Tài nguyên tạm thời ở URL khác. Client vẫn dùng URL gốc; trình duyệt có thể đổi POST thành GET.

RFC 9110
303

See Other

Kết quả nằm ở URL khác, lấy bằng GET. Dùng sau khi POST form để tránh gửi lại (mẫu Post/Redirect/Get).

RFC 9110
304

Not Modified

Bản cache vẫn còn hợp lệ (If-None-Match hoặc If-Modified-Since khớp), nên không gửi phần thân.

RFC 9110
307

Temporary Redirect

Chuyển hướng tạm thời giữ nguyên phương thức và phần thân, POST vẫn là POST.

RFC 9110
308

Permanent Redirect

Chuyển hướng vĩnh viễn giữ nguyên phương thức và phần thân. Phiên bản chặt chẽ của 301.

RFC 9110

4xx Lỗi phía client

Request sai: cú pháp lỗi, thiếu xác thực, không có quyền hoặc tài nguyên không tồn tại.

400

Bad Request

Server không xử lý được vì request sai định dạng: cú pháp lỗi, JSON hỏng hoặc tham số sai.

RFC 9110
401

Unauthorized

Thiếu hoặc sai thông tin xác thực. Phản hồi có header WWW-Authenticate cho biết cách đăng nhập.

RFC 9110
402

Payment Required

Dành cho hệ thống thanh toán số trong tương lai; một số API dùng khi cần trả phí gói hay hạn mức.

RFC 9110
403

Forbidden

Server biết bạn là ai nhưng từ chối thao tác vì bạn không có quyền. Đăng nhập lại cũng không giúp được.

RFC 9110
404

Not Found

Tài nguyên không tồn tại, hoặc server không muốn tiết lộ là nó tồn tại.

RFC 9110
405

Method Not Allowed

Phương thức HTTP không được hỗ trợ cho URL này, ví dụ POST lên tài nguyên chỉ đọc. Header Allow liệt kê phương thức hợp lệ.

RFC 9110
406

Not Acceptable

Server không tạo được phản hồi khớp với các header Accept (định dạng, ngôn ngữ hay kiểu mã hóa).

RFC 9110
407

Proxy Authentication Required

Giống 401, nhưng client phải xác thực với proxy trước.

RFC 9110
408

Request Timeout

Server chờ client gửi xong request quá lâu nên đóng kết nối.

RFC 9110
409

Conflict

Request xung đột với trạng thái hiện tại, ví dụ xung đột chỉnh sửa hoặc trùng khóa duy nhất.

RFC 9110
410

Gone

Tài nguyên đã bị xóa có chủ đích và sẽ không quay lại. Công cụ tìm kiếm gỡ nó nhanh hơn 404.

RFC 9110
411

Length Required

Server yêu cầu header Content-Length cho request này.

RFC 9110
412

Precondition Failed

Một header điều kiện như If-Match không khớp, thường dùng để tránh ghi đè thay đổi của người khác.

RFC 9110
413

Content Too Large

Phần thân request lớn hơn mức server cho phép (trước đây gọi là "Payload Too Large").

RFC 9110
414

URI Too Long

URL dài hơn mức server chấp nhận, thường do nhét quá nhiều dữ liệu vào query string của GET.

RFC 9110
415

Unsupported Media Type

Định dạng phần thân (Content-Type) không được hỗ trợ, ví dụ gửi XML tới API chỉ nhận JSON.

RFC 9110
416

Range Not Satisfiable

Header Range yêu cầu một phần không tồn tại của file.

RFC 9110
417

Expectation Failed

Server không đáp ứng được yêu cầu trong header Expect.

RFC 9110
418

I'm a teapot

Trò đùa Cá tháng Tư từ giao thức điều khiển ấm cà phê: một ấm trà không pha được cà phê. Một số site dùng làm easter egg.

RFC 2324
421

Misdirected Request

Request tới một server không thể trả lời cho host này, ví dụ khi kết nối HTTP/2 dùng lại trỏ sai origin.

RFC 9110
422

Unprocessable Content

Cú pháp đúng nhưng nội dung không hợp lệ, ví dụ không qua được quy tắc kiểm tra (trước đây là "Unprocessable Entity").

RFC 9110
423

Locked

WebDAV: tài nguyên đang bị khóa.

RFC 4918
424

Failed Dependency

WebDAV: request thất bại vì phụ thuộc vào một request khác đã thất bại.

RFC 4918
425

Too Early

Server không xử lý request có thể bị phát lại, như dữ liệu early data của TLS 1.3.

RFC 8470
426

Upgrade Required

Client phải chuyển sang giao thức khác, ghi trong header Upgrade.

RFC 9110
428

Precondition Required

Server yêu cầu request có điều kiện (If-Match) để tránh mất cập nhật.

RFC 6585
429

Too Many Requests

Client gửi quá nhiều request trong một khoảng thời gian (giới hạn tần suất). Retry-After cho biết khi nào thử lại.

RFC 6585
431

Request Header Fields Too Large

Tổng header quá lớn hoặc một header quá lớn, thường do cookie phình to.

RFC 6585
451

Unavailable For Legal Reasons

Tài nguyên bị chặn vì lý do pháp lý, như kiểm duyệt hay lệnh tòa. Con số lấy từ tiểu thuyết "Fahrenheit 451".

RFC 7725

5xx Lỗi phía server

Request có vẻ hợp lệ nhưng server xử lý thất bại.

500

Internal Server Error

Lỗi chung: có sự cố ngoài dự kiến trên server. Hãy xem log của server.

RFC 9110
501

Not Implemented

Server không hỗ trợ tính năng hoặc phương thức cần để thực hiện request.

RFC 9110
502

Bad Gateway

Gateway hoặc proxy nhận phản hồi không hợp lệ từ server phía sau, ví dụ khi ứng dụng sau Nginx bị sập.

RFC 9110
503

Service Unavailable

Server tạm thời không xử lý được vì quá tải hoặc đang bảo trì. Retry-After có thể cho biết khi nào quay lại.

RFC 9110
504

Gateway Timeout

Gateway hoặc proxy không nhận được phản hồi từ server phía sau kịp thời.

RFC 9110
505

HTTP Version Not Supported

Server không hỗ trợ phiên bản HTTP dùng trong request.

RFC 9110
506

Variant Also Negotiates

Cấu hình thương lượng nội dung sai: chính phiên bản được chọn lại cố thương lượng tiếp.

RFC 2295
507

Insufficient Storage

WebDAV: server không lưu được dữ liệu cần để hoàn tất request.

RFC 4918
508

Loop Detected

WebDAV: server phát hiện vòng lặp vô hạn khi xử lý request.

RFC 5842
510

Not Extended

Request cần thêm phần mở rộng. Đã lỗi thời, hầu như không dùng.

RFC 2774
511

Network Authentication Required

Client phải đăng nhập vào mạng trước, thường là trang captive portal Wi-Fi của khách sạn hay sân bay.

RFC 6585

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

Mỗi phản hồi HTTP đều bắt đầu bằng một mã trạng thái gồm ba chữ số cho client biết request diễn ra thế nào. Chữ số đầu xác định nhóm: 1xx thông tin, 2xx thành công, 3xx chuyển hướng, 4xx lỗi phía client và 5xx lỗi phía server. Trình duyệt, công cụ tìm kiếm, cache, API client và công cụ giám sát đều hành động dựa trên các mã này, nên chọn đúng mã rất quan trọng: 301 chuyển giá trị SEO sang URL mới còn 302 thì không, 503 báo crawler quay lại sau, 429 báo API client giảm tốc. Các mã chủ yếu được định nghĩa trong RFC 9110 (HTTP Semantics), một số nằm ở các RFC riêng.

Tính năng

  • • Đủ 61 mã trạng thái đã đăng ký với IANA, từ 100 đến 511
  • • Giải thích dễ hiểu ý nghĩa của từng mã và khi nào nên dùng
  • • Tìm ngay theo số, tên hoặc từ khóa, kèm bộ lọc theo nhóm
  • • Liên kết trực tiếp tới mục RFC định nghĩa từng mã
  • • Phân màu theo nhóm và có anchor #mã để chia sẻ link

Nhanh, không cần mạng

Toàn bộ tài liệu được hiển thị sẵn trong trang, nên tìm kiếm chạy tức thì trong trình duyệt mà không gửi request nào lên server.

Tài liệu tra cứu, không theo dõi.

Cách dùng công cụ Mã trạng thái HTTP

  1. 1

    Gõ một số như 404, một tên như "gateway" hoặc một từ như "redirect" vào ô tìm kiếm. Kết quả cập nhật khi bạn gõ.

  2. 2

    Dùng các nút nhóm (1xx đến 5xx) để thu hẹp danh sách, ví dụ xem tất cả lỗi phía client cùng lúc.

  3. 3

    Đọc phần giải thích dưới mỗi mã để biết ý nghĩa, khi nào server nên trả về và client phản ứng ra sao.

  4. 4

    Mở liên kết RFC để xem đặc tả chính xác, hoặc chia sẻ link thẳng tới một mã bằng anchor như #429.

Ví dụ thực tế

Thiết kế REST API

Trả 201 Created kèm header Location sau POST, 204 No Content sau DELETE, 400 khi JSON sai định dạng, 422 khi dữ liệu không hợp lệ và 409 khi request xung đột với trạng thái hiện tại.

Chuyển trang mà giữ SEO

Dùng 301 hoặc 308 cho chuyển hướng vĩnh viễn để công cụ tìm kiếm chuyển thứ hạng, 302 hoặc 307 cho chuyển hướng tạm thời như A/B test. 308 và 307 còn giữ nguyên phương thức POST.

Lỗi xác thực

Trả 401 khi người dùng chưa đăng nhập hoặc token không hợp lệ, 403 khi đã biết người dùng nhưng không có quyền. Nhiều API trả 404 thay cho 403 để giấu việc tài nguyên tồn tại.

Bảo trì và quá tải

Trả 503 kèm header Retry-After khi bảo trì để crawler giữ thứ hạng, và 429 kèm Retry-After khi client vượt giới hạn tần suất.

Câu hỏi thường gặp

401 và 403 khác nhau thế nào?+

401 Unauthorized nghĩa là "bạn là ai?": thiếu hoặc sai xác thực. 403 Forbidden nghĩa là "tôi biết bạn là ai nhưng bạn không được làm việc này". Đăng nhập lại sửa được 401, không sửa được 403.

Chuyển hướng dùng 301 hay 302?+

Dùng 301 (hoặc 308) khi URL cũ mất hẳn, 302 (hoặc 307) khi nó sẽ quay lại. Dùng 302 cho chuyển hướng vĩnh viễn có thể làm công cụ tìm kiếm chậm lập chỉ mục URL mới.

502, 503 và 504 khác nhau ra sao?+

502 Bad Gateway: proxy nhận phản hồi không hợp lệ từ server phía sau. 503 Service Unavailable: server quá tải hoặc đang bảo trì. 504 Gateway Timeout: server phía sau không trả lời kịp.

Có nên trả 200 kèm thông báo lỗi?+

Không. Client, cache và công cụ giám sát đều dựa vào mã trạng thái. Trả 200 cho lỗi sẽ che lỗi khỏi các công cụ và có thể khiến trang lỗi bị lập chỉ mục thành "soft 404".