Bird
Raised Fist0
Rest APIprogramming~10 mins

Last-Modified and If-Modified-Since in Rest API - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Last-Modified and If-Modified-Since
Client sends GET request
↓
Server checks resource last modified date
↓
Does client send If-Modified-Since header?
No→Send full resource with 200 OK
Yes↓
Compare If-Modified-Since date with resource last modified
↓
End
The client sends a GET request. The server checks if the client sent an If-Modified-Since date. If yes, it compares with the resource's last modified date. If the resource is unchanged, server replies 304 Not Modified. Otherwise, it sends the full resource with 200 OK.
Execution Sample
Rest API
GET /image.png HTTP/1.1
Host: example.com
If-Modified-Since: Wed, 21 Oct 2020 07:28:00 GMT

Server response:
HTTP/1.1 304 Not Modified

(no body)
Client requests an image with If-Modified-Since header. Server replies 304 Not Modified if image unchanged since that date.
Execution Table
StepClient RequestServer ActionConditionServer Response
1GET /image.png (no If-Modified-Since)Check resource last modified dateNo If-Modified-Since header200 OK with full image
2GET /image.png with If-Modified-Since: 2020-10-21T07:28:00ZCompare If-Modified-Since with resource last modifiedResource last modified 2020-10-20T10:00:00Z < If-Modified-Since304 Not Modified, no body
3GET /image.png with If-Modified-Since: 2020-10-21T07:28:00ZCompare If-Modified-Since with resource last modifiedResource last modified 2020-10-22T09:00:00Z > If-Modified-Since200 OK with full image
4EndNo further actionRequest handledConnection closed
💡 Execution stops after server sends response based on resource modification check.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
If-Modified-Since headerNoneNoneWed, 21 Oct 2020 07:28:00 GMTWed, 21 Oct 2020 07:28:00 GMTWed, 21 Oct 2020 07:28:00 GMT
Resource Last-Modified2020-10-20T10:00:00Z2020-10-20T10:00:00Z2020-10-20T10:00:00Z2020-10-22T09:00:00Z2020-10-22T09:00:00Z
Server ResponseNone200 OK with full image304 Not Modified200 OK with full image200 OK with full image or 304 Not Modified
Key Moments - 3 Insights
Why does the server send a 304 Not Modified response instead of the full resource?
Because the If-Modified-Since date sent by the client is later than the resource's last modified date, meaning the client already has the latest version. See execution_table row 2.
What happens if the client does not send the If-Modified-Since header?
The server sends the full resource with a 200 OK response because it has no information to check if the client has a fresh copy. See execution_table row 1.
If the resource was modified after the If-Modified-Since date, what response does the server send?
The server sends the full resource with a 200 OK response to update the client. See execution_table row 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table row 2. What is the server's response when the resource last modified date is before the If-Modified-Since date?
A404 Not Found
B304 Not Modified with no body
C200 OK with full resource
D500 Internal Server Error
💡 Hint
Check the 'Server Response' column in row 2 of the execution_table.
According to variable_tracker, what is the value of 'If-Modified-Since header' after step 1?
ANone
BWed, 21 Oct 2020 07:28:00 GMT
C2020-10-20T10:00:00Z
D2020-10-22T09:00:00Z
💡 Hint
Look at the 'If-Modified-Since header' row and the 'After Step 1' column in variable_tracker.
If the resource last modified date changes to a date after the If-Modified-Since date, how does the server response change?
AIt sends 304 Not Modified
BIt sends 404 Not Found
CIt sends 200 OK with full resource
DIt sends 500 Internal Server Error
💡 Hint
Refer to execution_table row 3 where resource last modified is after If-Modified-Since.
Concept Snapshot
Last-Modified and If-Modified-Since headers help cache validation.
Client sends If-Modified-Since with a date.
Server compares with resource's Last-Modified date.
If resource unchanged, server replies 304 Not Modified (no body).
If changed, server replies 200 OK with full resource.
This saves bandwidth and speeds up loading.
Full Transcript
This visual trace shows how the Last-Modified and If-Modified-Since headers work in HTTP caching. The client sends a GET request optionally with an If-Modified-Since header containing a date. The server checks the resource's last modified date. If the client did not send If-Modified-Since, the server sends the full resource with 200 OK. If the client sent If-Modified-Since, the server compares it with the resource's last modified date. If the resource has not changed since that date, the server sends a 304 Not Modified response with no body, telling the client to use its cached copy. If the resource has changed, the server sends the full resource with 200 OK. The execution table shows different scenarios and server responses. The variable tracker shows how the headers and dates change during the process. Key moments clarify common confusions about when 304 is sent and what happens without If-Modified-Since. The quiz tests understanding of these steps. This mechanism helps reduce data transfer and speeds up web browsing by avoiding unnecessary downloads.

Practice

(1/5)
1. What is the main purpose of the Last-Modified header in a REST API response?
easy
A. To tell the client when the resource was last changed
B. To tell the client the size of the resource
C. To tell the client the type of the resource
D. To tell the client the server's current time

Solution

  1. Step 1: Understand the role of Last-Modified header

    The Last-Modified header indicates the date and time when the resource was last changed on the server.
  2. 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.
  3. Final Answer:

    To tell the client when the resource was last changed -> Option A
  4. Quick Check:

    Last-Modified = resource last change time [OK]
Hint: Last-Modified shows last change date of resource [OK]
Common Mistakes:
  • Confusing Last-Modified with Content-Length
  • Thinking it shows server current time
  • Mixing it up with Content-Type header
2. Which of the following is the correct syntax to send an If-Modified-Since header in an HTTP request?
easy
A. If-Modified-Since: 2023-01-01T12:00:00Z
B. If-Modified-Since = "2023-01-01 12:00:00"
C. If-Modified-Since -> 01/01/2023 12:00
D. If-Modified-Since: Sun, 01 Jan 2023 12:00:00 GMT

Solution

  1. Step 1: Recall HTTP header date format

    HTTP headers use the RFC 1123 date format like Sun, 01 Jan 2023 12:00:00 GMT for date/time values.
  2. 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.
  3. Final Answer:

    If-Modified-Since: Sun, 01 Jan 2023 12:00:00 GMT -> Option D
  4. Quick Check:

    If-Modified-Since uses RFC 1123 date format [OK]
Hint: Use RFC 1123 date format for If-Modified-Since header [OK]
Common Mistakes:
  • Using ISO 8601 instead of RFC 1123 format
  • Using '=' instead of ':' in header
  • Using arrow '->' instead of colon
3. Given the server responds with header 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?
medium
A. HTTP 400 Bad Request
B. HTTP 304 Not Modified
C. HTTP 200 OK with resource data
D. HTTP 500 Internal Server Error

Solution

  1. Step 1: Compare If-Modified-Since with Last-Modified

    The client's If-Modified-Since date is earlier (09:00) than the server's Last-Modified date (10:00).
  2. 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.
  3. Final Answer:

    HTTP 200 OK with resource data -> Option C
  4. Quick Check:

    If-Modified-Since < Last-Modified -> 200 OK [OK]
Hint: If client date before last change, server sends full data [OK]
Common Mistakes:
  • Thinking server sends 304 when resource changed after client date
  • Confusing 400 Bad Request with conditional headers
  • Assuming server error on date mismatch
4. A client sends 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?
medium
A. Server does not check If-Modified-Since header before sending data
B. Server sends wrong Last-Modified date format
C. Client sent If-Modified-Since header incorrectly
D. Server is missing Content-Type header

Solution

  1. Step 1: Understand expected server behavior

    The server should compare If-Modified-Since with resource's Last-Modified and respond 304 if not changed.
  2. Step 2: Identify why server always sends 200 OK

    If server ignores the header and always sends full data, it likely does not check the If-Modified-Since header properly.
  3. Final Answer:

    Server does not check If-Modified-Since header before sending data -> Option A
  4. Quick Check:

    Ignoring If-Modified-Since means always 200 OK [OK]
Hint: Server must check If-Modified-Since to send 304 [OK]
Common Mistakes:
  • Blaming client for server ignoring header
  • Thinking wrong Last-Modified format causes 200 OK
  • Confusing Content-Type header with caching headers
5. You want to optimize your REST API to reduce bandwidth by using Last-Modified and If-Modified-Since. Which approach correctly implements this optimization?
hard
A. Ignore If-Modified-Since and always send full resource with Last-Modified
B. Send Last-Modified header with resource date; on request, check If-Modified-Since and respond 304 if unchanged
C. Send If-Modified-Since header from server to client to indicate last change
D. Use Last-Modified header only on POST requests

Solution

  1. Step 1: Understand how Last-Modified and If-Modified-Since work together

    The server sends Last-Modified header with the resource's last change date. The client sends If-Modified-Since header on next request to ask if resource changed since that date.
  2. Step 2: Implement correct server logic for optimization

    The server compares If-Modified-Since with resource's last modified date and returns HTTP 304 Not Modified if unchanged, saving bandwidth.
  3. Final Answer:

    Send Last-Modified header with resource date; on request, check If-Modified-Since and respond 304 if unchanged -> Option B
  4. Quick Check:

    Send Last-Modified + check If-Modified-Since -> 304 optimization [OK]
Hint: Send Last-Modified; respond 304 if If-Modified-Since matches [OK]
Common Mistakes:
  • Sending If-Modified-Since from server instead of client
  • Ignoring If-Modified-Since header in server logic
  • Using Last-Modified only on POST requests
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard