HTTP Caching is often something, that is automatically broken as soon as systems like CGI, PHP or ASP are being used. Even when the actual result page is quite static. This is a pity, as details like this could easily accelerate a web application when navigating within: E.g., when it seems to take forever to just react on the click of the back button. Applications with dynamic graphical components like map applications would stand to profit even more, yet this is rarely used. There is a huge gap in usability when you get down from several seconds reaction time to one second and another when you get down from one second to the order of 0.2 seconds. Caching can help you get there.
A useful tool to check how your current application is cacheable is Mark Nottingham's Cacheability Engine. You will find his useful Caching Tutorial there.
You can get caching right in seemingly hard cases, too: Itamar Shtull-Trauring describes how to use HTTP/1.1 features like ETag to correctly make personalized content cacheable.