Tra cứu mọi mã trạng thái HTTP: ý nghĩa, thời điểm máy chủ gửi mã và đặc tả định nghĩa mã đó. Tìm theo số hoặc từ khóa, lọc theo nhóm và liên kết trực tiếp đến một mã.
Máy chủ đã nhận được phần tiêu đề của yêu cầu và máy khách có thể gửi phần thân. Thường gặp khi máy khách gửi “Expect: 100-continue” trước khi tải lên phần thân có dung lượng lớn.
Được gửi trước phản hồi cuối cùng để trình duyệt có thể bắt đầu tải trước các tài nguyên được liệt kê trong tiêu đề Link. CDN và máy chủ dùng mã này để tăng tốc độ tải trang.
Yêu cầu đã được chấp nhận để xử lý nhưng chưa hoàn tất. Các API đưa tác vụ vào hàng đợi, chẳng hạn xuất dữ liệu hoặc xử lý hàng loạt, thường dùng mã này.
Tài nguyên đã được chuyển vĩnh viễn đến URL trong tiêu đề Location. Trình duyệt và công cụ tìm kiếm cập nhật liên kết; một số máy khách chuyển POST thành GET khi làm theo chuyển hướng này.
Tài nguyên tạm thời nằm ở URL khác được nêu trong tiêu đề Location. Thường gặp sau khi đăng nhập và trong các chuyển hướng ngắn hạn; trình duyệt thường làm theo bằng GET.
Máy khách cần dùng GET để lấy kết quả từ URL khác. Được dùng sau khi gửi biểu mẫu bằng POST để chuyển hướng đến trang xác nhận (mẫu Post/Redirect/Get).
Bản sao trong bộ nhớ đệm vẫn còn hợp lệ nên máy chủ không gửi phần thân. Thường gặp khi trình duyệt xác thực lại tệp đã lưu trong bộ nhớ đệm bằng If-None-Match hoặc If-Modified-Since.
Tài nguyên hiện tạm thời ở URL khác và client phải gửi lại yêu cầu với cùng phương thức và phần thân. Trình duyệt cũng dùng mã này cho các chuyển hướng HSTS nội bộ sang HTTPS.
Tài nguyên đã được chuyển vĩnh viễn và client phải dùng cùng phương thức và phần thân tại URL mới. Đây là phiên bản vĩnh viễn của 307, an toàn khi chuyển hướng các yêu cầu POST.
Máy chủ đã hiểu yêu cầu nhưng từ chối xử lý; đăng nhập lại cũng không giúp ích. Mã này thường xuất hiện khi thiếu quyền, tính năng liệt kê thư mục bị tắt hoặc tường lửa chặn client.
Tài nguyên tồn tại nhưng không hỗ trợ phương thức HTTP được dùng, chẳng hạn gửi POST đến URL chỉ cho phép đọc. Phản hồi liệt kê các phương thức được phép trong header Allow.
Một điều kiện trong header yêu cầu, chẳng hạn If-Match, không được đáp ứng. Mã này giúp tránh ghi đè tài nguyên đã thay đổi kể từ lần cuối client đọc tài nguyên đó.
Trò đùa Cá tháng Tư từ Giao thức Điều khiển Ấm pha cà phê Siêu văn bản năm 1998: một ấm trà từ chối pha cà phê. HTTP dành riêng mã này và không sử dụng, nhưng một số máy chủ trả về mã này như một Easter egg hoặc để từ chối bot không mong muốn.
Được định nghĩa trong RFC 2324 / RFC 9110 (Unused)
Yêu cầu đúng định dạng nhưng nội dung không hợp lệ, chẳng hạn biểu mẫu không vượt qua các quy tắc xác thực. API thường dùng mã này cho lỗi xác thực dữ liệu.
Client đã gửi quá nhiều yêu cầu trong một khoảng thời gian nhất định. API dùng mã này để giới hạn tốc độ và thường kèm header Retry-After cho biết khi nào có thể thử lại.
Không phải mã chuẩn. nginx dùng mã này nội bộ để đóng kết nối mà không gửi phản hồi, thường nhằm loại bỏ lưu lượng không mong muốn; client thực tế không bao giờ nhận được mã này.
Không thể truy cập tài nguyên vì lý do pháp lý, chẳng hạn theo lệnh của tòa án hoặc do kiểm duyệt của chính phủ. Con số này liên hệ đến tiểu thuyết Fahrenheit 451.
Không phải mã chuẩn. nginx ghi mã này vào nhật ký khi client đóng kết nối trước khi máy chủ phản hồi, chẳng hạn khi người dùng hủy một trang tải chậm hoặc client hết thời gian chờ.
Máy chủ gặp lỗi ngoài dự kiến và không thể hoàn tất yêu cầu. Đây là lỗi chung do lỗi trong mã, sự cố máy chủ hoặc cấu hình sai; nhật ký máy chủ có thông tin chi tiết.
Cổng kết nối hoặc proxy nhận được phản hồi không hợp lệ từ máy chủ thượng nguồn. Lỗi này thường xảy ra khi ứng dụng phía sau nginx hoặc bộ cân bằng tải bị lỗi hay đang khởi động lại.
Cổng kết nối hoặc proxy không nhận được phản hồi từ máy chủ nguồn kịp thời. Lỗi này thường xảy ra khi yêu cầu đến máy chủ phía sau xử lý quá lâu, chẳng hạn như truy vấn cơ sở dữ liệu dài.
Ứng dụng khách phải xác thực để truy cập mạng. Cổng đăng nhập thường gửi mã này trên Wi-Fi khách sạn, sân bay hoặc quán cà phê trước khi bạn đăng nhập.
Không phải mã chuẩn. Cloudflare trả về mã này khi máy chủ gốc từ chối kết nối, thường do máy chủ web ngừng hoạt động hoặc chặn địa chỉ IP của Cloudflare.
Không phải mã chuẩn. Cloudflare trả về mã này khi đã kết nối với máy chủ gốc nhưng không nhận được phản hồi HTTP trong thời gian chờ (mặc định là 100 giây).
Không phải mã chuẩn. Cloudflare trả về mã này khi chứng chỉ SSL của máy chủ gốc không hợp lệ và chế độ SSL Full (strict) được bật.
Được định nghĩa trong Cloudflare
Cách sử dụng
Nhập mã số (chẳng hạn 404 hoặc chỉ nhập 5 để tìm tất cả lỗi máy chủ) hoặc từ khóa như “redirect” hay “timeout”.
Thu hẹp danh sách bằng bộ lọc nhóm: thông tin, thành công, chuyển hướng, lỗi máy khách hoặc lỗi máy chủ.
Dùng “Sao chép liên kết” ở bất kỳ mã nào để chia sẻ liên kết trực tiếp đến mã đó, chẳng hạn trong báo cáo lỗi.
Cách hoạt động
Mọi phản hồi HTTP đều bắt đầu bằng mã trạng thái gồm ba chữ số. Chữ số đầu tiên xác định nhóm: 1xx là phản hồi thông tin, 2xx là thành công, 3xx là chuyển hướng, 4xx là lỗi do yêu cầu gây ra và 5xx là lỗi phía máy chủ. Máy khách không nhận diện được một mã cụ thể sẽ xử lý mã đó như mã x00 trong cùng nhóm; vì vậy, mã 4xx chưa biết sẽ được xử lý như 400.
Các mã cốt lõi được định nghĩa trong RFC 9110 (HTTP Semantics, 2022), thay thế RFC 7231 cũ hơn. Các mã khác đến từ những phần mở rộng: WebDAV (RFC 4918), RFC 6585 cho 428, 429, 431 và 511, RFC 7725 cho 451, và RFC 8470 cho 425. RFC 9110 cũng đổi tên hai mã: 413 hiện là “Content Too Large” và 422 là “Unprocessable Content”. Bạn vẫn có thể gặp các tên cũ “Payload Too Large” và “Unprocessable Entity”.
Một số mã xuất hiện trong nhật ký không phải là tiêu chuẩn. nginx dùng nội bộ các mã 444 và 494–499 (499 cho biết máy khách đã ngừng chờ), còn Cloudflare trả về 520–526 khi không nhận được phản hồi phù hợp từ máy chủ gốc. Các mã này được đánh dấu là “Non-standard” trong danh sách. Cụm từ mô tả trạng thái (chẳng hạn “Not Found”) được hiển thị bằng tiếng Anh như trong các đặc tả; HTTP/2 và HTTP/3 chỉ gửi con số.
Ví dụ
Dùng 301 hay 308 khi chuyển website
Cả hai đều là chuyển hướng vĩnh viễn. Dùng 301 cho các trường hợp chuyển trang thông thường; dùng 308 khi máy khách phải gửi lại yêu cầu POST hoặc PUT đến URL mới, vì một số máy khách đổi POST thành GET sau khi gặp 301.
Phân biệt 401 và 403
API trả về 401 khi không có token hoặc token đã hết hạn, vì vậy máy khách cần đăng nhập. API trả về 403 khi token hợp lệ nhưng người dùng không có quyền, nên đăng nhập lại cũng không giúp ích.
Chẩn đoán lỗi 502 phía sau nginx
Lỗi 502 Bad Gateway từ nginx có nghĩa là ứng dụng phía sau không phản hồi đúng cách. Hãy kiểm tra tiến trình ứng dụng có đang chạy không và nhật ký ghi nhận gì; còn 504 có nghĩa là ứng dụng phản hồi quá chậm.
Câu hỏi thường gặp
404 và 410 khác nhau thế nào?
404 có nghĩa là máy chủ không tìm thấy tài nguyên, nhưng không cho biết tình trạng này có kéo dài hay không. 410 cho biết tài nguyên đã bị xóa có chủ đích và sẽ không được khôi phục, giúp công cụ tìm kiếm loại URL khỏi chỉ mục sớm hơn.
Lỗi xác thực dữ liệu nên trả về 400 hay 422?
Cả hai đều được dùng. 400 phù hợp với các yêu cầu mà máy chủ không thể phân tích cú pháp, chẳng hạn JSON không hợp lệ. 422 phù hợp với các yêu cầu phân tích cú pháp được nhưng chứa giá trị không hợp lệ, chẳng hạn trường email không có ký tự @.
418 I'm a teapot có phải là mã trạng thái thật không?
Mã này xuất phát từ một RFC đùa ngày Cá tháng Tư năm 1998. RFC 9110 quy định 418 không được sử dụng để tránh bị gán cho mục đích khác. Một vài máy chủ trả về mã này như một trò đùa, nhưng nó không có ý nghĩa chuẩn.
Mã 499 bắt nguồn từ đâu?
499 là mã riêng của nginx. Mã này xuất hiện trong nhật ký nginx khi máy khách đóng kết nối trước khi máy chủ gửi phản hồi. Máy khách không bao giờ nhận được mã 499; mã này thường cho thấy phản hồi chậm hoặc máy khách bị hết thời gian chờ.
Các công cụ tìm kiếm có xem 302 giống như 301 không?
302 báo hiệu việc chuyển hướng tạm thời, nên ban đầu các công cụ tìm kiếm thường vẫn lập chỉ mục URL gốc. Nếu 302 được duy trì trong thời gian dài, Google có thể xem đây là chuyển hướng vĩnh viễn. Hãy dùng 301 hoặc 308 cho các chuyển hướng vĩnh viễn.
Quyền riêng tư
Danh sách được tích hợp trong trang. Việc tìm kiếm và lọc diễn ra trong trình duyệt; cụm từ tìm kiếm không được gửi đi đâu hoặc đưa vào dữ liệu phân tích.