Different HTTP headers are used to make caching work.
Headers sent by parties involved can be ignored by the receiving party, and hence there is no guarantee things will work as expected. Because of this, multiple headers / directives are usually sent by parties to make sure one of them will work.
Mozilla is the most reliable source of description on the headers.