Applies to: Protocol and format interpretation for developers inspecting authorized media delivery.

The useful distinctions

  • Expires uses an absolute HTTP date.
  • max-age expresses a relative lifetime.
  • An applicable max-age or s-maxage takes precedence over Expires.

Read the complete policy before choosing a date

It is tempting to copy the visible expiry timestamp into a report and call that the resource's lifetime. The synthetic response shows why that shortcut can fail: an absolute expiry field and a relative lifetime can coexist. First collect all relevant cache policy fields, then determine their precedence. Only after that should a diagnostic note describe when an ordinary reuse allowance ends.

Make conflicting configuration reviewable

Here the dates are an hour apart, while the relative allowance is only thirty seconds. That mismatch is useful as a configuration-review example because the two interpretations are far enough apart to notice. The proper conclusion is about policy precedence, not about a clock error or a media fault. If this were an actual response, preserve the raw field values and collection time so the responsible server configuration could be examined. Do not silently rewrite the absolute date to match a preferred interpretation. Also keep object freshness distinct from programme availability; a cached guide response can expire while the events it describes remain scheduled for later. In the invented response, the thirty-second rule reaches its boundary at 10:00:30 under the stated simplified clock assumption. The one-hour Expires gap is still recorded, but it does not supply the selected lifetime.

Worked example · synthetic

The applicable relative freshness instruction is 30 seconds, rather than the one-hour gap suggested by the two dates. The example isolates precedence; it does not model every cache constraint.

Synthetic text example; no network operation has been performed.

HTTP/MIME line endings are CRLF. Request URL context, where labelled, is commentary rather than a wire field. No message was transmitted.

HTTP/1.1 200 OK
Date: Sun, 08 Nov 2026 10:00:00 GMT
Expires: Sun, 08 Nov 2026 11:00:00 GMT
Cache-Control: max-age=30
Content-Length: 0

Check the interpretation

  • Collect all cache policy fields first.
  • Parse the dates in GMT.
  • Document the conflict instead of altering the captured fields.