These headers help servers and clients save time and data by checking if content has changed before sending it again.
Last-Modified and If-Modified-Since in Rest API
Last-Modified: <HTTP-date> If-Modified-Since: <HTTP-date>
Last-Modified is sent by the server to tell when the resource was last changed.
If-Modified-Since is sent by the client to ask the server to send data only if it changed after this date.
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
HTTP/1.1 304 Not Modified
This simple server sends a fixed last modified date. If the client sends the same date in If-Modified-Since, it replies with 304 Not Modified. Otherwise, it sends the content with the Last-Modified header.
from http.server import BaseHTTPRequestHandler, HTTPServer from datetime import datetime class SimpleHandler(BaseHTTPRequestHandler): last_modified = datetime(2024, 6, 1, 12, 0, 0) def do_GET(self): # Format last_modified as HTTP date last_mod_str = self.last_modified.strftime('%a, %d %b %Y %H:%M:%S GMT') # Get If-Modified-Since header from client ims = self.headers.get('If-Modified-Since') if ims == last_mod_str: # Resource not modified self.send_response(304) self.end_headers() return # Resource modified or no If-Modified-Since header self.send_response(200) self.send_header('Content-type', 'text/plain') self.send_header('Last-Modified', last_mod_str) self.end_headers() self.wfile.write(b'Hello! This is the latest content.') if __name__ == '__main__': server_address = ('', 8000) httpd = HTTPServer(server_address, SimpleHandler) print('Server running on http://localhost:8000') httpd.serve_forever()
The date format must follow the HTTP-date format like: 'Wed, 21 Oct 2015 07:28:00 GMT'.
Clients use If-Modified-Since to avoid downloading unchanged data, saving bandwidth.
Servers respond with 304 status to tell clients to use cached data.
Last-Modified tells when data was last changed.
If-Modified-Since asks if data changed since a date.
These headers help save time and data by avoiding unnecessary downloads.
Practice
Last-Modified header in a REST API response?Solution
Step 1: Understand the role of Last-Modified header
TheLast-Modifiedheader indicates the date and time when the resource was last changed on the server.Step 2: Compare options with the header's purpose
Only To tell the client when the resource was last changed correctly describes this purpose. Other options describe unrelated information.Final Answer:
To tell the client when the resource was last changed -> Option AQuick Check:
Last-Modified = resource last change time [OK]
- Confusing Last-Modified with Content-Length
- Thinking it shows server current time
- Mixing it up with Content-Type header
If-Modified-Since header in an HTTP request?Solution
Step 1: Recall HTTP header date format
HTTP headers use the RFC 1123 date format likeSun, 01 Jan 2023 12:00:00 GMTfor date/time values.Step 2: Match options to correct format
If-Modified-Since: Sun, 01 Jan 2023 12:00:00 GMT matches the correct header syntax and date format. Other options use invalid syntax or date formats.Final Answer:
If-Modified-Since: Sun, 01 Jan 2023 12:00:00 GMT -> Option DQuick Check:
If-Modified-Since uses RFC 1123 date format [OK]
- Using ISO 8601 instead of RFC 1123 format
- Using '=' instead of ':' in header
- Using arrow '->' instead of colon
Last-Modified: Wed, 10 May 2023 10:00:00 GMT, what will the server respond if the client sends If-Modified-Since: Wed, 10 May 2023 09:00:00 GMT?Solution
Step 1: Compare If-Modified-Since with Last-Modified
The client'sIf-Modified-Sincedate is earlier (09:00) than the server'sLast-Modifieddate (10:00).Step 2: Determine server response based on dates
Since the resource was modified after the client's date, the server sends full data with HTTP 200 OK.Final Answer:
HTTP 200 OK with resource data -> Option CQuick Check:
If-Modified-Since < Last-Modified -> 200 OK [OK]
- Thinking server sends 304 when resource changed after client date
- Confusing 400 Bad Request with conditional headers
- Assuming server error on date mismatch
If-Modified-Since: Tue, 09 May 2023 10:00:00 GMT but the server always responds with HTTP 200 OK and full data, ignoring the header. What is the likely error in server handling?Solution
Step 1: Understand expected server behavior
The server should compareIf-Modified-Sincewith resource'sLast-Modifiedand respond 304 if not changed.Step 2: Identify why server always sends 200 OK
If server ignores the header and always sends full data, it likely does not check theIf-Modified-Sinceheader properly.Final Answer:
Server does not check If-Modified-Since header before sending data -> Option AQuick Check:
Ignoring If-Modified-Since means always 200 OK [OK]
- Blaming client for server ignoring header
- Thinking wrong Last-Modified format causes 200 OK
- Confusing Content-Type header with caching headers
Last-Modified and If-Modified-Since. Which approach correctly implements this optimization?Solution
Step 1: Understand how Last-Modified and If-Modified-Since work together
The server sendsLast-Modifiedheader with the resource's last change date. The client sendsIf-Modified-Sinceheader on next request to ask if resource changed since that date.Step 2: Implement correct server logic for optimization
The server comparesIf-Modified-Sincewith resource's last modified date and returns HTTP 304 Not Modified if unchanged, saving bandwidth.Final Answer:
Send Last-Modified header with resource date; on request, check If-Modified-Since and respond 304 if unchanged -> Option BQuick Check:
Send Last-Modified + check If-Modified-Since -> 304 optimization [OK]
- Sending If-Modified-Since from server instead of client
- Ignoring If-Modified-Since header in server logic
- Using Last-Modified only on POST requests
Ready to prove it?
Pass the test and this pattern moves unknown
