I found this excellent listing of Cache-Control definitions on askapache.com:
This object may not be stored in any cache, even the requestors browser cache.
This object may be held in any cache but it must be revalidated every time it is requested.
This object can be stored in the requesting browser´s cache but not in a shared cache
Tells caches that they must obey any freshness information you give them about an object. The HTTP allows caches to take liberties with the freshness of objects; by specifying this header, youre telling the cache that you want it to strictly follow your rules.
Similar to must-revalidate, except that it only applies to proxy caches.