expired icon indicating copy to clipboard operation
expired copied to clipboard

Handle combination of cache-control and expires headers. Handle no-cache and no-store.

Open wehriam opened this issue 3 years ago • 1 comments

Updates to handle combinations of cache-control and expires headers, no-cache and no-store values.

From RFC 2616:

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)

wehriam avatar Mar 17 '21 19:03 wehriam

Coverage Status

Coverage decreased (-18.2%) to 81.818% when pulling bbdeabd9725807e6a514e50bb363ba8c11754ccc on bunchtogether:feature/max-age-and-expires-handling into 12547dc66ff234d044afcce12215ec59b6a6c9a9 on lukechilds:master.

coveralls avatar Mar 17 '21 19:03 coveralls