Response headers like Cache-Control and ETag help browsers and servers work together to save time and data by reusing stored information.
Response headers (Cache-Control, ETag) in Rest API
Cache-Control: max-age=seconds, no-cache, no-store, public, private
ETag: "unique-identifier"Cache-Control tells the browser how long to keep a copy of the response.
ETag is a unique tag that changes when the content changes, helping browsers check if they need to update.
Cache-Control: max-age=3600Cache-Control: no-cache
ETag: "abc123xyz"Cache-Control: private, max-age=600 ETag: "v1.0-2024"
This small web server sends data with Cache-Control and ETag headers. If the client already has the same ETag, it returns a 304 status to save data.
from flask import Flask, request, make_response app = Flask(__name__) @app.route('/data') def data(): content = 'Hello, this is some data.' etag = 'abc123xyz' # Check if client sent ETag if_none_match = request.headers.get('If-None-Match') if if_none_match == etag: # Content not changed response = make_response('', 304) # 304 Not Modified else: # Send content with headers response = make_response(content) response.headers['Cache-Control'] = 'max-age=60' response.headers['ETag'] = etag return response if __name__ == '__main__': app.run(debug=True)
Always use ETag with Cache-Control to make caching smarter.
Setting Cache-Control: no-store means the browser should never save the response.
304 status means 'Not Modified' and tells the browser to use its saved copy.
Cache-Control tells browsers how long to keep data.
ETag helps check if data changed to avoid sending it again.
Using these headers makes websites faster and saves data.
Practice
Cache-Control header in an HTTP response?Solution
Step 1: Understand the role of Cache-Control
The Cache-Control header instructs browsers and caches how long they can store the response data before requesting it again.Step 2: Compare options with Cache-Control purpose
Only To tell browsers how long to keep the response data correctly describes this behavior. Other options describe unrelated functions.Final Answer:
To tell browsers how long to keep the response data -> Option DQuick Check:
Cache-Control = Duration for caching [OK]
- Confusing Cache-Control with security headers
- Thinking Cache-Control sets content type
- Assuming Cache-Control reveals server info
Solution
Step 1: Recall Cache-Control max-age syntax
The correct way to specify caching time in seconds is usingmax-age=seconds.Step 2: Check each option's correctness
Only "Cache-Control: max-age=3600" usesmax-age=3600, which is valid. Others use invalid directives.Final Answer:
"Cache-Control: max-age=3600" -> Option AQuick Check:
max-age sets cache time [OK]
- Using 'timeout' instead of 'max-age'
- Confusing Cache-Control with Expires header syntax
- Using unsupported directives like 'duration'
Cache-Control: max-age=0, must-revalidate ETag: "abc123"
What happens when the browser sends a request with header
If-None-Match: "abc123"?Solution
Step 1: Understand ETag and If-None-Match interaction
The ETag header is a unique identifier for the content version. The browser sends If-None-Match with the ETag value to check if content changed.Step 2: Interpret Cache-Control and server response
With max-age=0 and must-revalidate, the browser asks server to validate content. If ETag matches, server responds with 304 Not Modified, saving bandwidth.Final Answer:
Server returns 304 Not Modified if content unchanged -> Option AQuick Check:
ETag + If-None-Match = 304 if unchanged [OK]
- Assuming server always sends full content
- Confusing 304 with error codes
- Ignoring Cache-Control directives
Cache-Control: max-age=abc. What is the likely result?Solution
Step 1: Analyze max-age value validity
The max-age directive requires a numeric value in seconds. 'abc' is invalid.Step 2: Understand browser behavior on invalid Cache-Control
Browsers typically ignore invalid Cache-Control headers and treat the response as non-cacheable.Final Answer:
The browser ignores the Cache-Control header and does not cache -> Option CQuick Check:
Invalid max-age causes no caching [OK]
- Thinking server returns error for header syntax
- Assuming browser caches with invalid value
- Confusing max-age with other headers
Solution
Step 1: Identify headers that enable conditional requests
ETag provides a unique identifier for content versions, allowing clients to ask if content changed.Step 2: Understand Cache-Control no-cache directive
no-cache forces the browser to validate with the server before using cached data, ensuring fresh content without unnecessary full data transfer.Step 3: Evaluate other options
Options without ETag cannot validate changes efficiently; no-store disables caching; max-age=0 without ETag disables validation.Final Answer:
Cache-Control: no-cache and ETag with unique value -> Option BQuick Check:
no-cache + ETag = bandwidth saving [OK]
- Omitting ETag disables change detection
- Using no-store disables caching entirely
- Assuming max-age alone reduces bandwidth
Ready to prove it?
Pass the test and this pattern moves unknown
