Last-Modified and If-Modified-Since in Rest API - Time & Space Complexity
When a server uses Last-Modified and If-Modified-Since headers, it decides if it needs to send data again.
We want to see how the time to handle requests changes as more requests come in.
Analyze the time complexity of the following code snippet.
GET /resource HTTP/1.1
Host: example.com
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
// Server side:
if (resource.lastModified <= request.headers['If-Modified-Since']) {
return 304 Not Modified;
} else {
return 200 OK with resource data;
}
This code checks if the resource has changed since the time the client last saw it, to decide if data should be sent.
- Primary operation: Comparing the resource's last modified timestamp with the request header.
- How many times: Once per incoming request.
Each request requires a simple timestamp comparison, which takes the same small amount of time regardless of resource size.
| Input Size (number of requests) | Approx. Operations |
|---|---|
| 10 | 10 timestamp comparisons |
| 100 | 100 timestamp comparisons |
| 1000 | 1000 timestamp comparisons |
Pattern observation: The work grows directly with the number of requests, but each check is very fast and simple.
Time Complexity: O(n)
This means the time to handle requests grows linearly with the number of requests, with each request taking a quick check.
[X] Wrong: "The server must read the whole resource file every time to check if it changed."
[OK] Correct: The server only compares timestamps, which is a quick check and does not require reading the full resource each time.
Understanding how simple checks like timestamp comparisons scale helps you explain efficient server responses and caching in real projects.
"What if the server had to read the entire resource content to compare it each time? How would the time complexity change?"
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
