Mã trạng thái HTTP
Các mã hay gặp nhất từ API và CDN. Mã thử nghiệm hiếm được bỏ qua.
| Mã | Tên | Ý nghĩa |
|---|---|---|
| 200 | OK | Thành công, có nội dung |
| 201 | Đã tạo | Đã tạo tài nguyên |
| 204 | Không có nội dung | Thành công, nội dung rỗng |
| 301 | Đã chuyển vĩnh viễn | Chuyển hướng vĩnh viễn |
| 302 | Đã tìm thấy | Chuyển hướng tạm thời |
| 304 | Không thay đổi | Dùng bản cache |
| 400 | Yêu cầu không hợp lệ | Yêu cầu của máy khách không hợp lệ |
| 401 | Chưa xác thực | Cần xác thực / xác thực thất bại |
| 403 | Bị cấm | Đã xác thực nhưng bị từ chối |
| 404 | Không tìm thấy | Tài nguyên không tồn tại |
| 405 | Phương thức không được cho phép | Phương thức HTTP sai |
| 408 | Quá thời gian chờ | Máy khách quá chậm |
| 409 | Xung đột | Xung đột trạng thái |
| 410 | Đã bị xóa | Đã bị xóa vĩnh viễn |
| 422 | Thực thể không thể xử lý | Ngữ nghĩa không hợp lệ |
| 429 | Quá nhiều yêu cầu | Bị giới hạn tần suất |
| 500 | Lỗi máy chủ nội bộ | Lỗi phía máy chủ |
| 502 | Gateway không hợp lệ | Phản hồi từ máy chủ nguồn không hợp lệ |
| 503 | Dịch vụ không khả dụng | Quá tải hoặc ngừng hoạt động |
| 504 | Gateway quá thời gian chờ | Máy chủ nguồn quá thời gian chờ |
Ghi chú
- 401 và 403: thiếu/sai xác thực so với đã đăng nhập nhưng không được phép.
- CDN có thể trả 5xx khi không tới được máy chủ gốc.
Năm nhóm mã trạng thái
Chữ số đầu tiên cho biết ai chịu trách nhiệm và xảy ra chuyện gì sơ bộ. 1xx mang tính thông tin và hiếm khi xuất hiện phía client. 2xx báo thành công — 200 OK kèm nội dung, 204 No Content không kèm nội dung, 206 cho tải từng phần. 3xx báo tài nguyên đang ở nơi khác. 4xx báo yêu cầu sai: cú pháp sai, thiếu xác thực hoặc chạm giới hạn tốc độ. 5xx báo máy chủ gặp sự cố dù yêu cầu hoàn toàn ổn. Chỉ cần đọc chữ số đầu tiên cũng biết nên sửa phía client hay nhờ sự can thiệp phía server.
Chọn đúng loại chuyển hướng
301 và 308 đều mang nghĩa vĩnh viễn; 302 và 307 đều mang nghĩa tạm thời. Khác biệt nằm ở cách xử lý phương thức: 301 và 302 theo thói quen cũ cho phép client đổi POST thành GET, còn 307 và 308 bảo toàn phương thức và thân ban đầu, điều này quan trọng với API và gửi biểu mẫu. Dùng 301 khi URL thực sự đã chuyển đi vĩnh viễn, và dùng 302 hay 307 cho việc định tuyến tạm thời như trang bảo trì hay kiểm tra A/B. Cảnh giác với chuỗi chuyển hướng — mỗi bước lặp thêm đều đội latency và làm mòn giá trị liên kết, vì vậy hãy chuyển hướng thẳng đến đích cuối cùng.
Xử lý lỗi 4xx
401 nghĩa là thiếu hoặc sai xác thực, vì vậy việc gửi thông tin xác thực hợp lệ có thể khắc phục; 403 nghĩa là yêu cầu đã được hiểu và đã xác thực nhưng bị từ chối quyền truy cập, và thử lại với cùng thông tin xác thực sẽ không giúp ích. 404 nghĩa là tài nguyên không tồn tại; 410 báo tài nguyên đã từng tồn tại và đã bị xóa cố ý. 429 nghĩa là bạn đã chạm giới hạn tốc độ và cần lùi lại, tôn trọng header Retry-After nếu có. 400 thường do đầu vào sai định dạng, 405 nghĩa là phương thức không phù hợp với URL đó, và 422 nghĩa là cú pháp hợp lệ nhưng nội dung vi phạm quy tắc kiểm tra.
Đọc mã 5xx
500 là lỗi nội bộ tổng quát; 502 Bad Gateway nghĩa là máy chủ phụ đã trả về kết quả không thể dùng được; 503 nghĩa là dịch vụ tạm ngưng hoạt động hoặc quá tải; 504 nghĩa là máy chủ phụ bị quá thời gian chờ. Đây là vấn đề của máy chủ, không phải của bên gọi, vì vậy cách xử lý là thử lại với cơ chế lùi thời gian, kiểm tra tình trạng máy chủ phụ, hoặc giảm tải. Một CDN có thể phát ra mã 502, 503 hay 504 thay cho origin mà nó không thể chạm tới, đó là lý do cùng một lỗi có thể đến từ hai nguồn rất khác nhau — hãy xem server và header cache-status để xác định chính xác.
Mã trạng thái trong thực tế: API và caching
Hai trường hợp thường nhật deserve sự chú ý. Thứ nhất, caching: 200 kèm header Cache-Control có thể được lưu trữ, 304 Not Modified báo client tái sử dụng bản sao của mình, và mã 5xx thì không nên lưu. Thứ hai, API: một POST tạo tài nguyên mới nên trả về 201 kèm header Location, DELETE thường trả về 204, và PATCH không làm thay đổi gì có thể trả về 200 hoặc 204. Client ứng xử tốt sẽ rẽ nhánh theo nhóm trước (2xx, 4xx, 5xx) rồi mới xét đến mã chính xác, nhờ đó logic thử lại và lùi thời gian trở nên đơn giản và dự đoán được.
Câu hỏi thường gặp
- Mã HTTP 403 nghĩa là gì?
- 403 nghĩa là máy chủ đã hiểu và xác thực yêu cầu nhưng từ chối cấp quyền truy cập tài nguyên. Khác với 401, đăng nhập lại cũng không giải quyết được.
- Redirect HTTP 301 và 302 khác nhau thế nào?
- 301 là chuyển hướng vĩnh viễn — trình duyệt và công cụ tìm kiếm nên dùng URL mới. 302 là chuyển hướng tạm thời và URL cũ vẫn còn hiệu lực.
- HTTP 429 nghĩa là gì và cách xử lý ra sao?
- 429 nghĩa là bạn đã vượt quá giới hạn tần suất yêu cầu. Hãy giảm tốc độ và tuân thủ header Retry-After nếu máy chủ trả về.