pikini
pikini

Reputation: 185

Etag attribute present but no Cache-control present in HTTP header

HTTP/1.1 200 OK
Date: Thu, 23 Jun 2011 07:59:40 GMT
Server: Apache/2.2.16 (Amazon)
Last-Modified: Thu, 23 Jun 2011 07:28:10 GMT
ETag: "68a7f-278-4a65c06e95680"
Accept-Ranges: bytes
Content-Length: 632
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

The above is the http headers for a response. It does not have a Cache-control attribute but has an Etag and Last-Modified attribute. How do browsers handle this situation ? For how long the cache is considered fresh now?

Upvotes: 0

Views: 1467

Answers (1)

Remy Lebeau
Remy Lebeau

Reputation: 595402

According to RFC 2616 Section 13.2.4:

13.2.4 Expiration Calculations

In order to decide whether a response is fresh or stale, we need to compare its freshness lifetime to its age. The age is calculated as
described in section 13.2.3; this section describes how to calculate
the freshness lifetime, and to determine if a response has expired.
In the discussion below, the values can be represented in any form
appropriate for arithmetic operations.

We use the term "expires_value" to denote the value of the Expires
header. We use the term "max_age_value" to denote an appropriate value of the number of seconds carried by the "max-age" directive of the Cache-Control header in a response (see section 14.9.3).

The max-age directive takes priority over Expires, so if max-age is present in a response, the calculation is simply:

  freshness_lifetime = max_age_value

Otherwise, if Expires is present in the response, the calculation is:

  freshness_lifetime = expires_value - date_value

Note that neither of these calculations is vulnerable to clock skew, since all of the information comes from the origin server.

If none of Expires, Cache-Control: max-age, or Cache-Control: s-
maxage (see section 14.9.3) appears in the response, and the response does not include other restrictions on caching, the cache MAY compute a freshness lifetime using a heuristic. The cache MUST attach Warning 113 to any response whose age is more than 24 hours if such warning has not already been added.

Also, if the response does have a Last-Modified time, the heuristic
expiration value SHOULD be no more than some fraction of the interval
since that time. A typical setting of this fraction might be 10%.

The calculation to determine if a response has expired is quite
simple:

  response_is_fresh = (freshness_lifetime > current_age)

Upvotes: 1

Related Questions