Caching

Caching files on the browser makes subsequent visits to the page faster. Badly implemented caching means files that are already on the client are requested at every page visit or that unnecessary requests are made to the server.
Third party controls that use query params for what should be static content also run the risk of not being cached by proxy servers and even some browsers.

Browser cache usage

Testing

The Net panel in the Firebug extension for Firefox or Fiddler will show if files have been cached. 2 visits should be made - one with an empty cache and one with a primed cache and the requests compared. Cached files should not show up in the 2nd trace. 304 codes indicate that no expiry date has been set but a check still had to be made to see if the cached file was current.

Solution

Don't assume that performance issues will be solved once the cache is primed - the end-user may be unable or unwilling to cache the content. They may even be visiting other websites, whose own content pushes yours out of their cache.
Don't use Etags.
If you are developing an application that could share components with other websites within the organisation, try to move common components to a central area - that way, you may find your end-user's browser cache already holds this content.
Caching Tips
Add an Expires or a Cache-Control Header
Make Ajax Cacheable