THAM KHẢO NHANH MÃ TRẠNG THÁI HTTP
Mã trạng thái, headers, và các mẫu response phổ biến
Thông Tin 1xx
Mã 1xx
| 100 | Continue — server nhận headers, client nên gửi body |
| 101 | Switching Protocols — nâng cấp lên WebSocket hoặc HTTP/2 |
| 102 | Processing — server nhận request, vẫn đang xử lý (WebDAV) |
| 103 | Early Hints — preload tài nguyên trước response cuối |
Ghi Chú Sử Dụng
# 100 Continue: client sends Expect header, waits for 100
curl -H "Expect: 100-continue" -d @large.json URL
# 101: upgrade to WebSocket
Connection: Upgrade / Upgrade: websocket
Thành Công 2xx
Mã 2xx
| 200 | OK — response thành công tiêu chuẩn |
| 201 | Created — tài nguyên tạo thành công (POST/PUT) |
| 202 | Accepted — nhận request, đang xử lý bất đồng bộ |
| 203 | Non-Authoritative Info — đã biến đổi bởi proxy |
| 204 | No Content — thành công nhưng không có body (DELETE) |
| 205 | Reset Content — thành công, client nên reset form |
| 206 | Partial Content — đã đáp ứng range request |
| 207 | Multi-Status — nhiều mã trạng thái (WebDAV) |
Sử Dụng REST API
| GET → 200 | Trả về tài nguyên kèm body |
| POST → 201 | Tài nguyên đã tạo, thêm Location header |
| PUT → 200/204 | Đã cập nhật tài nguyên (có/không có body) |
| DELETE → 204 | Đã xóa, không có body trả về |
| PATCH → 200 | Cập nhật một phần, trả về tài nguyên đã sửa đổi |
Chuyển Hướng 3xx
Mã 3xx
| 300 | Multiple Choices — có nhiều biểu diễn khả dụng |
| 301 | Moved Permanently — tài nguyên đã chuyển, cập nhật bookmark |
| 302 | Found — redirect tạm thời (thường bị dùng sai thay 303) |
| 303 | See Other — redirect bằng GET sau POST |
| 304 | Not Modified — dùng phiên bản cache (ETag/If-Modified) |
| 307 | Temporary Redirect — cùng method, vị trí tạm thời |
| 308 | Permanent Redirect — cùng method, vị trí vĩnh viễn |
Hành Vi Redirect
| 301/308 | Vĩnh viễn — search engine cập nhật index |
| 302/307 | Tạm thời — URL gốc vẫn là canonical |
| 301/302 | Có thể đổi method thành GET khi redirect |
| 307/308 | Phải giữ nguyên method HTTP gốc |
Lỗi Client 4xx
Lỗi Client Phổ Biến
| 400 | Bad Request — cú pháp sai hoặc tham số không hợp lệ |
| 401 | Unauthorized — cần hoặc thất bại xác thực |
| 403 | Forbidden — đã xác thực nhưng không được phép |
| 404 | Not Found — tài nguyên không tồn tại |
| 405 | Method Not Allowed — method HTTP không được hỗ trợ |
| 406 | Not Acceptable — không thể đáp ứng Accept header |
| 408 | Request Timeout — client quá chậm để gửi request |
| 409 | Conflict — request xung đột với trạng thái hiện tại |
Thêm Lỗi Client
| 410 | Gone — tài nguyên bị xóa vĩnh viễn (không chỉ thiếu) |
| 411 | Length Required — thiếu Content-Length header |
| 412 | Precondition Failed — If-Match/If-Unmodified thất bại |
| 413 | Content Too Large — body request vượt giới hạn |
| 414 | URI Too Long — URL vượt giới hạn server |
| 415 | Unsupported Media Type — Content-Type không được chấp nhận |
| 422 | Unprocessable Content — cú pháp hợp lệ, lỗi ngữ nghĩa |
| 429 | Too Many Requests — vượt giới hạn tần suất |
Lỗi Server 5xx
Mã 5xx
| 500 | Internal Server Error — exception chưa xử lý trên server |
| 501 | Not Implemented — server không hỗ trợ method |
| 502 | Bad Gateway — upstream server gửi response không hợp lệ |
| 503 | Service Unavailable — quá tải hoặc đang bảo trì |
| 504 | Gateway Timeout — upstream server không phản hồi kịp thời |
| 505 | HTTP Version Not Supported — phiên bản không được xử lý |
| 507 | Insufficient Storage — server không thể lưu request (WebDAV) |
| 511 | Network Auth Required — cần đăng nhập captive portal |
Chiến Lược Retry
| 500 | Retry với backoff; có thể tạm thời |
| 502/504 | Retry — sự cố upstream có thể tự giải quyết |
| 503 | Kiểm tra Retry-After header trước khi retry |
| 501/505 | Không retry — sửa request phía client |
Mã Thường Dùng
Mã Dùng Nhiều Nhất (tóm tắt)
| 200 | OK — mọi thứ hoạt động |
| 201 | Created — tài nguyên mới đã tạo |
| 204 | No Content — thành công, body rỗng |
| 301 | Moved Permanently — cập nhật URL |
| 304 | Not Modified — dùng cache |
| 400 | Bad Request — sửa request của bạn |
| 401 | Unauthorized — đăng nhập trước |
| 403 | Forbidden — không đủ quyền |
| 404 | Not Found — URL sai hoặc đã xóa |
| 422 | Unprocessable — lỗi validation |
| 429 | Too Many Requests — chậm lại |
| 500 | Server Error — không phải lỗi của bạn |
| 502 | Bad Gateway — lỗi proxy/upstream |
| 503 | Unavailable — thử lại sau |
Tham Khảo Headers
Request Headers
| Accept | Loại media response mong muốn (vd: application/json) |
| Authorization | Thông tin xác thực (Bearer token, Basic base64) |
| Content-Type | Loại media của body request |
| If-None-Match | Có điều kiện: ETag cho xác thực cache |
| If-Modified-Since | Có điều kiện: ngày cho xác thực cache |
| Cache-Control | Chỉ thị caching (no-cache, max-age) |
| User-Agent | Chuỗi nhận dạng client |
Response Headers
| Content-Type | Loại media của body response |
| Location | URL đích redirect hoặc tài nguyên vừa tạo |
| ETag | Entity tag cho xác thực cache |
| Cache-Control | Chỉ thị caching (max-age, no-store) |
| Retry-After | Thời gian chờ trước khi retry (429/503) |
| WWW-Authenticate | Scheme xác thực cần thiết (gửi kèm 401) |
| Set-Cookie | Đặt cookie trên client |
Mẫu Phổ Biến
Luồng Caching
# First request — server returns ETag
GET /api/data → 200, ETag: "abc123"
# Subsequent request — conditional
GET /api/data, If-None-Match: "abc123"
→ 304 Not Modified (use cache)
Luồng Xác Thực
# Unauthenticated request
GET /api/secret → 401, WWW-Authenticate: Bearer
# With token
GET /api/secret, Authorization: Bearer
→ 200 OK
Giới Hạn Tần Suất
# Rate limited response
429 Too Many Requests
Retry-After: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1700000000
Thương Lượng Nội Dung
# Client prefers JSON, accepts XML
Accept: application/json, application/xml;q=0.9
# Server can't satisfy → 406 Not Acceptable
# Server returns best match → 200 + Content-Type