Part 05 · HTTP · 5.1.02

HTTP semantics và caching

HTTP định nghĩa ý nghĩa của method, status, representation và precondition; cache chỉ an toàn khi key, freshness và privacy policy phản ánh đúng resource lẫn authorization.

Core distinction: resource không đồng nhất với representation. Content-Type mô tả body trả về; Accept nói client có thể xử lý representation nào. Intermediary được phép cache/transform chỉ trong phạm vi semantics và policy.

1. Message, representation và negotiation

Request/response gồm control data, headers và optional content. Server có thể chọn representation dựa trên Accept, ngôn ngữ hoặc encoding; nếu lựa chọn phụ thuộc request header thì Vary phải làm rõ thành phần của cache key. Đừng dùng URL giống nhau cho body có authorization khác nhau trong shared cache nếu policy không bảo vệ được.

2. Method semantics

PropertyMethods / meaningInterview trap
SafeGET, HEAD (và các safe method)Safe không cấm logging/analytics; nó mô tả intended business effect
IdempotentPUT, DELETE và safe methodsLặp request có intended effect tương đương, không bắt buộc response bytes/status giống nhau
Command/createPOSTKhông mặc định retry-safe; cần application idempotency nếu có side effect
Partial updatePATCHPhải định nghĩa patch format, conflict và null semantics

Idempotency theo HTTP không tự biến payment hoặc gửi email thành operation retry-safe. Client chỉ nên tự retry khi biết request chưa được áp dụng hoặc application có key/fingerprint và replay policy.

3. Status code là contract

4. Conditional requests và lost update

ETag là validator; strong và weak ETag có độ chính xác khác nhau. If-None-Match hỗ trợ cache validation (thường trả 304), còn If-Match bảo vệ optimistic concurrency khi cập nhật. Last-Modified hữu ích nhưng kém chính xác khi nhiều thay đổi trong cùng một đơn vị thời gian.

GET /orders/42                 ETag: "v17"
PUT /orders/42
If-Match: "v17"               -> update only if version still matches
                                -> 412 when another writer produced v18

5. Freshness, privacy và cache directives

DirectiveÝ nghĩa vận hành
max-ageFresh trong số giây tại client; s-maxage có thể override cho shared cache.
no-storeKhông lưu response; phù hợp dữ liệu nhạy cảm nhưng không đồng nghĩa “không log”.
no-cacheĐược lưu nhưng phải revalidate trước khi dùng.
privateKhông cho shared cache dùng response; vẫn có thể cache ở browser.
stale-while-revalidate/stale-if-errorCho phép stale có giới hạn để giảm latency hoặc chịu outage, nếu product chấp nhận.

Cache key phải bao gồm mọi request dimension ảnh hưởng representation, thường qua Vary. Authorization, cookie, tenant và personalized data là điểm phải review trước khi bật shared caching. Invalidation/tagging và TTL là trade-off consistency, không chỉ là performance switch.

6. HTTP/2 và HTTP/3

HTTP/2 multiplex nhiều stream và nén header nhưng các stream vẫn chia sẻ TCP connection, nên packet loss có thể tạo transport-level head-of-line. HTTP/3 chạy semantics HTTP trên QUIC, mỗi stream tránh HOL ở transport giữa các stream và hỗ trợ connection migration; application vẫn phải xử lý deadline, retry và ordering như cũ.

Checklist trả lời: nêu method semantics, status contract, validator/precondition, cache key/freshness/privacy và cách đo hit/miss/revalidation trước khi nói “bật cache”.
Tài liệu: RFC 9110 HTTP Semantics · RFC 9111 HTTP Caching · RFC 9114 HTTP/3