I\'ve run into a problem where I make changes to a few JavaScript files that are referenced in an HTML file, but the browser doesn\'t see the changes. It holds onto the copy
With every release, we simply prepend a monotonically increasing integer to the root path of all our static assets, which forces the client to reload (we've seen the query string method break in IE6 before). For example:
It requires rejiggering links with each release, but we've built functionality to automatically change the links into our deployment tools.
Once you do this, you can use Expires/Cache-Control headers that let the client cache JS resources "forever", since the path changes with each release, which i think is what @JasonCohen was getting at.