HTTP Semantics: Idempotency, Safety & Representation
At the core of the web lies the formal IETF HTTP Semantics specification (RFC 9110). Beyond basic request mechanics, understanding the formal semantics of HTTP—specifically how servers handle Idempotency, Safety, Conditional Requests, and Resource Representations—is what separates junior scriptwriters from senior API architects.
┌─────────────────────────────────────────────────────────────┐
│ HTTP Semantics Classification │
├─────────┬──────────────┬──────────────┬─────────────────────┤
│ Method │ Safe? │ Idempotent? │ Primary Semantics │
├─────────┼──────────────┼──────────────┼─────────────────────┤
│ GET │ YES │ YES │ Read representation │
│ HEAD │ YES │ YES │ Header inquiry │
│ OPTIONS │ YES │ YES │ Server capability │
│ PUT │ NO │ YES │ Full state replace │
│ DELETE │ NO │ YES │ State removal │
│ POST │ NO │ NO │ Process / Append │
│ PATCH │ NO │ NO (Usually) │ Delta modification │
└─────────┴──────────────┴──────────────┴─────────────────────┘
1. Conditional Requests & Optimistic Concurrency Control
When two users edit the same resource simultaneously, a "Lost Update" bug occurs where User B accidentally overwrites User A's changes. HTTP solves this using Conditional Requests powered by ETag and If-Match headers:
# 1. Client fetches user profile:
GET /api/v1/users/42 HTTP/1.1
Host: api.front-heaven.com
# Server Response with ETag fingerprint:
HTTP/1.1 200 OK
ETag: "v1-a8b2c3d4"
Content-Type: application/json
{ "name": "Hesam", "role": "Senior Engineer" }
# 2. Client updates user, passing ETag in If-Match header:
PUT /api/v1/users/42 HTTP/1.1
Host: api.front-heaven.com
If-Match: "v1-a8b2c3d4"
Content-Type: application/json
{ "name": "Hesam", "role": "Lead Architect" }
If another user modified the record in the meantime, the ETag changes on the server, and the server rejects the request with 412 Precondition Failed, completely preventing data loss!
Summary & Key Takeaways
- RFC 9110 governs standard HTTP semantics.
- Conditional requests (
If-Match,If-None-Match) enable optimistic concurrency control without database locks. 412 Precondition Failedprevents lost updates in concurrent multi-user environments.
Best Practices & Senior Guidance
- Use
If-Matchwith ETags on Critical Updates: Prevent accidental race condition overwrites in banking, billing, or multi-editor systems using conditional HTTP headers.