Thông Tin 1xx
Mã 1xx
100Continue — server nhận headers, client nên gửi body
101Switching Protocols — nâng cấp lên WebSocket hoặc HTTP/2
102Processing — server nhận request, vẫn đang xử lý (WebDAV)
103Early 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
200OK — response thành công tiêu chuẩn
201Created — tài nguyên tạo thành công (POST/PUT)
202Accepted — nhận request, đang xử lý bất đồng bộ
203Non-Authoritative Info — đã biến đổi bởi proxy
204No Content — thành công nhưng không có body (DELETE)
205Reset Content — thành công, client nên reset form
206Partial Content — đã đáp ứng range request
207Multi-Status — nhiều mã trạng thái (WebDAV)
Sử Dụng REST API
GET → 200Trả về tài nguyên kèm body
POST → 201Tà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 → 200Cập nhật một phần, trả về tài nguyên đã sửa đổi
Chuyển Hướng 3xx
Mã 3xx
300Multiple Choices — có nhiều biểu diễn khả dụng
301Moved Permanently — tài nguyên đã chuyển, cập nhật bookmark
302Found — redirect tạm thời (thường bị dùng sai thay 303)
303See Other — redirect bằng GET sau POST
304Not Modified — dùng phiên bản cache (ETag/If-Modified)
307Temporary Redirect — cùng method, vị trí tạm thời
308Permanent Redirect — cùng method, vị trí vĩnh viễn
Hành Vi Redirect
301/308Vĩnh viễn — search engine cập nhật index
302/307Tạm thời — URL gốc vẫn là canonical
301/302Có thể đổi method thành GET khi redirect
307/308Phải giữ nguyên method HTTP gốc
Lỗi Client 4xx
Lỗi Client Phổ Biến
400Bad Request — cú pháp sai hoặc tham số không hợp lệ
401Unauthorized — cần hoặc thất bại xác thực
403Forbidden — đã xác thực nhưng không được phép
404Not Found — tài nguyên không tồn tại
405Method Not Allowed — method HTTP không được hỗ trợ
406Not Acceptable — không thể đáp ứng Accept header
408Request Timeout — client quá chậm để gửi request
409Conflict — request xung đột với trạng thái hiện tại
Thêm Lỗi Client
410Gone — tài nguyên bị xóa vĩnh viễn (không chỉ thiếu)
411Length Required — thiếu Content-Length header
412Precondition Failed — If-Match/If-Unmodified thất bại
413Content Too Large — body request vượt giới hạn
414URI Too Long — URL vượt giới hạn server
415Unsupported Media Type — Content-Type không được chấp nhận
422Unprocessable Content — cú pháp hợp lệ, lỗi ngữ nghĩa
429Too Many Requests — vượt giới hạn tần suất
Lỗi Server 5xx
Mã 5xx
500Internal Server Error — exception chưa xử lý trên server
501Not Implemented — server không hỗ trợ method
502Bad Gateway — upstream server gửi response không hợp lệ
503Service Unavailable — quá tải hoặc đang bảo trì
504Gateway Timeout — upstream server không phản hồi kịp thời
505HTTP Version Not Supported — phiên bản không được xử lý
507Insufficient Storage — server không thể lưu request (WebDAV)
511Network Auth Required — cần đăng nhập captive portal
Chiến Lược Retry
500Retry với backoff; có thể tạm thời
502/504Retry — sự cố upstream có thể tự giải quyết
503Kiểm tra Retry-After header trước khi retry
501/505Không retry — sửa request phía client
Mã Thường Dùng
Mã Dùng Nhiều Nhất (tóm tắt)
200OK — mọi thứ hoạt động
201Created — tài nguyên mới đã tạo
204No Content — thành công, body rỗng
301Moved Permanently — cập nhật URL
304Not Modified — dùng cache
400Bad Request — sửa request của bạn
401Unauthorized — đăng nhập trước
403Forbidden — không đủ quyền
404Not Found — URL sai hoặc đã xóa
422Unprocessable — lỗi validation
429Too Many Requests — chậm lại
500Server Error — không phải lỗi của bạn
502Bad Gateway — lỗi proxy/upstream
503Unavailable — thử lại sau
Tham Khảo Headers
Request Headers
AcceptLoại media response mong muốn (vd: application/json)
AuthorizationThông tin xác thực (Bearer token, Basic base64)
Content-TypeLoại media của body request
If-None-MatchCó điều kiện: ETag cho xác thực cache
If-Modified-SinceCó điều kiện: ngày cho xác thực cache
Cache-ControlChỉ thị caching (no-cache, max-age)
User-AgentChuỗi nhận dạng client
Response Headers
Content-TypeLoại media của body response
LocationURL đích redirect hoặc tài nguyên vừa tạo
ETagEntity tag cho xác thực cache
Cache-ControlChỉ thị caching (max-age, no-store)
Retry-AfterThời gian chờ trước khi retry (429/503)
WWW-AuthenticateScheme 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