Web Developers sometimes use file.ext?v=137
as a version control system so they can force visitors to use an updated file. This is so terrible. Instead link to apache-003.css
and set it to be cached forever. When you change the file you just change the links to apache-004.css
.
This eliminates millions of bandwidth and resource robbing 304 If-Modified-Since
requests.
On the server my files are named apache.css and apache.js, but in the xhtml I point to them using the names apache-113.css
and apache-113.js
, after I change the file I just add 1 to the number, and the new file is cached. They are internally redirected to apache.css and apache.js (invisible to the user) The concept is similar to a "shortcut" in windows or a symlink in BSD. The trick is that I never actually rename the files on the server. I just rename them in the html. That means apache-135.css
is served from the file apache.css but the browser/cache only see and know about apache-135.css
.
NOTE: You can do your own investigating of this sites source code and HTTP headers to see this whole system in action
Updated: 10/20/2008
RewriteEngine On RewriteBase / RewriteCond %{THE_REQUEST} ^(GET|HEAD) /z/([a-z]+)/(.+)-([0-9]+)\.(js|css).* HTTP/ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .+ /z/%2/%3.%5 [NC,L]
RewriteEngine On RewriteBase / RewriteRule ^([cij]+)(/?[a-z]*)/([a-z]+)-([0-9]+)\.([a-z]+)$ /$1$2/$3.$5 [L]
Ok so you want the xhtml to be the only file that isn't cached without being validated, its simple to setup your own caching scheme.
?v=foo
hack This object will be fresh for 1 week. It can be validated with Last-Modified. This object requests that a Cookie be set; this makes it and other pages affected automatically stale; clients must check them upon every request. Because it contains a query ('?') in the URL, many caches will not keep this object.