Bird
Raised Fist0
Rest APIprogramming~10 mins

ETag for conditional requests in Rest API - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to set the ETag header in the HTTP response.

Rest API
response.headers['ETag'] = [1]
Drag options to blanks, or click blank then click option'
A"12345abcde"
Betag_value
Crequest.headers['ETag']
DNone
Attempts:
3 left
💡 Hint
Common Mistakes
Using the request header value instead of setting a new ETag.
Assigning None instead of a string.
2fill in blank
medium

Complete the code to check if the client's ETag matches the server's ETag.

Rest API
if request.headers.get('If-None-Match') == [1]:
Drag options to blanks, or click blank then click option'
Aresponse.headers['ETag']
BNone
C"12345abcde"
Drequest.headers['ETag']
Attempts:
3 left
💡 Hint
Common Mistakes
Comparing with the request's own ETag header.
Using None instead of the ETag string.
3fill in blank
hard

Fix the error in the code to return 304 Not Modified when ETags match.

Rest API
if request.headers.get('If-None-Match') == [1]:
    return '', 304
Drag options to blanks, or click blank then click option'
A"12345abcde"
Bresponse.headers['ETag']
Crequest.headers['ETag']
DNone
Attempts:
3 left
💡 Hint
Common Mistakes
Using request or response header objects instead of string.
Using None which causes errors.
4fill in blank
hard

Fill both blanks to generate an ETag from the content and check the client's ETag.

Rest API
import hashlib

content = b"Hello World"
etag = [1](content).hexdigest()
if request.headers.get('If-None-Match') == [2]:
    return '', 304
Drag options to blanks, or click blank then click option'
Ahashlib.md5
Betag
C"etag"
Dhashlib.sha256
Attempts:
3 left
💡 Hint
Common Mistakes
Using a string literal instead of the variable for comparison.
Using the wrong hash function or variable names.
5fill in blank
hard

Fill all three blanks to set the ETag header, check the client's ETag, and return 304 if they match.

Rest API
import hashlib

content = b"Data to cache"
etag = [1](content).hexdigest()
response.headers['ETag'] = [2]
if request.headers.get('If-None-Match') == [3]:
    return '', 304
Drag options to blanks, or click blank then click option'
Ahashlib.sha1
Betag
C"etag"
Dhashlib.md5
Attempts:
3 left
💡 Hint
Common Mistakes
Using string literals instead of variables for headers.
Mixing different hash functions.

Practice

(1/5)
1.

What is the main purpose of an ETag in REST APIs?

easy
A. To help clients check if the resource has changed since last fetch
B. To encrypt the data sent from server to client
C. To authenticate the client making the request
D. To specify the content type of the response

Solution

  1. Step 1: Understand ETag role in REST

    ETags are unique identifiers for resource versions, used to detect changes.
  2. Step 2: Match purpose with options

    Only To help clients check if the resource has changed since last fetch describes checking if resource changed, which is the ETag's purpose.
  3. Final Answer:

    To help clients check if the resource has changed since last fetch -> Option A
  4. Quick Check:

    ETag purpose = freshness check [OK]
Hint: ETags track changes, not encrypt or authenticate [OK]
Common Mistakes:
  • Confusing ETag with authentication tokens
  • Thinking ETag encrypts data
  • Assuming ETag sets content type
2.

Which HTTP header should a client send to make a conditional GET request using an ETag?

easy
A. If-Modified-Since
B. If-None-Match
C. ETag
D. Cache-Control

Solution

  1. Step 1: Identify client header for ETag conditional requests

    The client sends If-None-Match header with the ETag value to check freshness.
  2. Step 2: Compare options

    If-Modified-Since uses dates, ETag is a response header, Cache-Control controls caching rules. Only If-None-Match fits.
  3. Final Answer:

    If-None-Match -> Option B
  4. Quick Check:

    Client uses If-None-Match for ETag check [OK]
Hint: Client sends If-None-Match with ETag to check freshness [OK]
Common Mistakes:
  • Using ETag header in request instead of response
  • Confusing If-Modified-Since with ETag usage
  • Sending Cache-Control instead of conditional header
3.

Given this HTTP interaction:
GET /resource HTTP/1.1
Host: example.com
If-None-Match: "abc123"

Server responds:
HTTP/1.1 304 Not Modified
What does this response mean?

medium
A. The resource has changed and new data is sent
B. The server encountered an error
C. The resource has not changed; client should use cached data
D. The request is unauthorized

Solution

  1. Step 1: Understand 304 Not Modified status

    304 means resource is unchanged since client's ETag, so no new data sent.
  2. Step 2: Match meaning with options

    The resource has not changed; client should use cached data correctly states client should use cached data because resource is unchanged.
  3. Final Answer:

    The resource has not changed; client should use cached data -> Option C
  4. Quick Check:

    304 = Not Modified, use cache [OK]
Hint: 304 means no change; use cached copy [OK]
Common Mistakes:
  • Thinking 304 means new data sent
  • Confusing 304 with error or unauthorized status
  • Ignoring ETag and caching role
4.

Consider this server code snippet handling ETags:

etag = generate_etag(resource)
if request.headers.get('If-None-Match') == etag:
return Response(status=304)
else:
return Response(data=resource, headers={'ETag': etag})

What is a potential bug in this code?

medium
A. It compares ETag strings without quotes, causing mismatch
B. It returns 304 even if ETag does not match
C. It does not handle If-Modified-Since header
D. It always returns data ignoring conditional requests

Solution

  1. Step 1: Analyze ETag comparison

    ETags in headers often include quotes, so direct string equality may fail if quotes differ.
  2. Step 2: Identify mismatch cause

    If client sends "abc123" but server etag is abc123 without quotes, comparison fails incorrectly.
  3. Final Answer:

    It compares ETag strings without quotes, causing mismatch -> Option A
  4. Quick Check:

    ETag quotes matter in comparison [OK]
Hint: ETag strings must match exactly including quotes [OK]
Common Mistakes:
  • Ignoring quotes around ETag values
  • Assuming If-Modified-Since is required for ETag logic
  • Returning 304 without checking ETag
5.

You want to optimize your REST API to reduce bandwidth by using ETags. Which approach correctly implements conditional GET requests with ETags?

1. Server generates ETag for resource.
2. Server sends ETag in response header.
3. Client stores ETag.
4. Client sends GET with If-None-Match header.
5. Server compares ETag and returns 304 if unchanged.
6. Otherwise, server sends new data with new ETag.

Which step is missing or incorrect?

hard
A. Step 6: Server should always send 200 status even if unchanged
B. Step 4: Client should send If-Modified-Since instead of If-None-Match
C. Step 3: Client should not store ETag
D. Step 5: Server must compare ETag including quotes exactly

Solution

  1. Step 1: Review each step for correctness

    Steps 1-4 are correct standard flow for ETag conditional requests.
  2. Step 2: Identify subtle issue in step 5

    Server must compare ETag values exactly, including quotes, or else conditional check fails.
  3. Step 3: Confirm other options are incorrect

    Client should store ETag (step 3), If-None-Match is correct header (step 4), and 304 status is correct for unchanged (step 6).
  4. Final Answer:

    Step 5: Server must compare ETag including quotes exactly -> Option D
  5. Quick Check:

    Exact ETag match including quotes is required [OK]
Hint: ETag comparison must be exact including quotes [OK]
Common Mistakes:
  • Ignoring quotes in ETag comparison
  • Using wrong conditional header
  • Sending 200 instead of 304 for unchanged resource
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