Validation-based caching helps your app save time and data by checking if information has changed before downloading it again.
Validation-based caching in Rest API
GET /resource HTTP/1.1 Host: example.com If-None-Match: "etag_value" Response: HTTP/1.1 304 Not Modified or HTTP/1.1 200 OK Content-Type: application/json ETag: "etag_value" {...data...}
The client sends an If-None-Match header with the ETag value it has.
The server replies with 304 Not Modified if data is unchanged, or 200 OK with new data and a new ETag if changed.
GET /users/123 HTTP/1.1 Host: api.example.com If-None-Match: "abc123"
HTTP/1.1 304 Not Modified
HTTP/1.1 200 OK Content-Type: application/json ETag: "def456" {"name": "Alice", "age": 30}
This program first gets data from the server and saves the ETag. Then it asks again with the ETag to see if data changed. If not, it uses cached data.
import requests url = 'https://api.example.com/data' # First request, no ETag yet response = requests.get(url) print('Status:', response.status_code) print('Data:', response.text) # Save ETag from response etag = response.headers.get('ETag') # Second request with ETag to check if data changed headers = {'If-None-Match': etag} if etag else {} response2 = requests.get(url, headers=headers) print('Status:', response2.status_code) if response2.status_code == 304: print('Data not changed, use cached data') else: print('New data:', response2.text)
ETag is a unique identifier for the version of the data.
304 means 'Not Modified' and tells the client to use its saved data.
Validation-based caching saves bandwidth and speeds up apps.
Validation-based caching checks if data changed before downloading again.
Clients send ETag with If-None-Match header to ask if data is new.
Servers reply with 304 if data is unchanged, or 200 with new data and ETag if changed.
Practice
Solution
Step 1: Understand validation-based caching concept
It is used to avoid downloading data again if it has not changed.Step 2: Identify the main purpose
The main goal is to check if data changed before downloading again to save bandwidth and time.Final Answer:
To check if the data has changed before downloading it again -> Option DQuick Check:
Validation-based caching = check data change before download [OK]
- Thinking caching stores data permanently
- Confusing caching with encryption
- Assuming caching skips validation
Solution
Step 1: Identify client headers for validation
The client uses headers to tell the server what version it has.Step 2: Match header for ETag validation
TheIf-None-Matchheader is sent with the ETag value to check if data changed.Final Answer:
If-None-Match -> Option CQuick Check:
Client asks with If-None-Match header [OK]
- Confusing If-Modified-Since with If-None-Match
- Using Cache-Control header for validation
- Thinking ETag is sent by client
If-None-Match: "abc123" header:HTTP/1.1 304 Not Modified ETag: "abc123"
What does this response mean?
Solution
Step 1: Understand HTTP 304 status meaning
304 means Not Modified, so data is unchanged since last fetch.Step 2: Interpret ETag match
ETag matches client's value, so server confirms data is still valid.Final Answer:
The data has not changed; client should use cached data -> Option BQuick Check:
304 Not Modified = use cached data [OK]
- Thinking 304 means new data sent
- Confusing 304 with 200 OK
- Assuming server rejects caching
If-None-Match: "xyz789". The server responds with:HTTP/1.1 200 OK
ETag: "abc123"
{ "data": "new content" }What is the likely problem in this interaction?
Solution
Step 1: Compare client and server ETags
Client sent "xyz789", server responded with "abc123" which is different.Step 2: Understand server response code
Since ETags differ, data changed, so server correctly sends 200 OK with new data.Final Answer:
The server sent a different ETag, indicating data changed, so 200 OK is correct -> Option AQuick Check:
Different ETag means data changed, send 200 OK [OK]
- Expecting 304 when ETags differ
- Thinking client ETag must match server's
- Confusing If-None-Match with If-Match
Solution
Step 1: Identify correct client-server header roles
Client sendsIf-None-Matchwith ETag to ask if data changed.Step 2: Understand server response logic
Server replies 304 if data unchanged, or 200 with new data and new ETag if changed.Final Answer:
Client sends request with If-None-Match header; server replies 304 if data unchanged or 200 with new data and ETag if changed -> Option AQuick Check:
Client sends If-None-Match; server replies 304 or 200 [OK]
- Mixing up who sends ETag and If-None-Match
- Thinking server sends If-None-Match header
- Assuming server never sends 304
Ready to prove it?
Pass the test and this pattern moves unknown
