- From: Raphaël D <raphael.droz@gmail.com>
- Date: Sun, 26 Jun 2016 18:37:14 -0300
- To: ietf-http-wg@w3.org
- Cc: alcidesv@zunzun.se, mnot@mnot.net
On Wed, 22 Jun 2016 13:39:39 +0200 Alcides Viamontes wrote:
> Yes, this is related to caching in general. And it is the reason
> people have to add query strings for doing cache busting. This problem is a
> separate issue, but it interacts with cache digests in that old version
> of assets are kept in the cache and therefore in the cache digest and the
> origin have no way of removing it. The origin can only create a new URL
> (say, via a new query string) that gets added to the cache and the cache
> digest.
(email subject renamed to avoid polluting the "Cache Digests for HTTP/2"
mailing-list thread)
Hi,
I read this incidentally meanwhile trying to understand what alternative
to cache-busting exists.
I'm stretching my head to find which overlooked IETF-http or W3C concept matches.
Nowadays most CMS, javascript/css-frameworks feature cache-busting
(usually using query-string) which is considered as the unavoidable
answer to the "can't forcefully refresh browser cache" issue (and web
traffic pattern).
Among the facts/reasons given are:
1) web-applications support the fact that some webserver set far-future
Expires times for assets (css, js, fonts)
2) downstream proxies and browser cache are not accessible by the webserver
3) but web application needs to force a HTML page to use freshest version of
some or all assets even if they were already cached in-browser with a
far-future Expires time
4) people don't use Last-Modified or ETags because zero request
always seems better than requesting and waiting for a 304 response.
5) static files are usually not routed through CGI but left to webserver
configuration rather than web-application itself which is related to
assumptions like the above n°1
"Is it a mistake to Expires +1 year /js/jquery.js"? seems one of the
underlying meta-questions (like the definitions of "persistence" and "version")
In the event assets are not be cached that long (says only 1 week) and all
(reverse)proxies are correctly configured, the issue still arise under
some circumstance.
For example in case a webapp upgrades assets, it leaves inconsistencies
between the main resource fetched by the user-agent (the HTML page) and
some of its "dependencies". Since old, cached assets that can't be easily
invalidated, new resources are created in caches.
(query-string versioning appears a lot like a N.I.H. ETags mechanism
the difference being that one HTTP response (main webpage) sends the
ETag of the multiple sub-resources it depends upon)
* Should cache-busting be part of HTTP best practices, what references and
knowledgeable voices have said/to say about it?
* Is there HTTP 1.x or 2.0 alternatives? Is there a need for it ? or
should the solution be uniquely in the hands of assets
deployment/distribution/versioning tools and/or web application tweaks
like query-string suffixes?
* Does the situation implies new precautions when using HTTP Expires header?
thank you
Ref:
¹ https://tools.ietf.org/html/rfc7234
² https://css-tricks.com/strategies-for-cache-busting-css/
³ https://www.shimmercat.com/en/info/articles/caching/#url-query-parameters-are-still-needed-to-update-assets-at-clients-
⁴ https://www.mnot.net/cache_docs/#FAQ ("My images expire a month from now, but I need to change them in the caches now!")
⁵ https://core.trac.wordpress.org/ticket/29201#comment:12
Received on Sunday, 26 June 2016 21:37:45 UTC