This is most likely down to the **DisableBrowserCaching** setting in Sitecore. 

When set to true this setting issues no-cache headers which leaves Sitecore to optionally handle the caching of the page via [several layers of caching][1]. This is obviously useful when you want to harness the power of data sources and don't want the browser to cache pages with personalised content.

When set to false, the no-cache headers are not sent and the browser is free to cache. This is more suited to sites with purely static content but you miss out on some of the benefits of Sitecore's features.

From the [documentation][2]:

> The DisableBrowserCaching setting in the web.config file controls
> whether Sitecore instructs clients to cache entire pages. When
> DisableBrowserCaching is true, Sitecore sets the following HTTP
> headers for each requested item (excluding media items):
>
> Cache-Control: no-cache, no-store Pragma: no-cache 
>
>These HTTP headers instruct Web clients, including edge-caching devices, not to cache the
> page. Web clients can cache CSS, media, and other resources used by
> the page. 
>
>Note: If DisableBrowserCaching is true, Sitecore does not
> apply ASP.NET OutputCache directives in layouts.3 To instruct Web
> clients to cache entire pages, set DisableBrowserCaching to false, and
> use the ASP.NET OutputCache directive in layouts and sublayouts, or
> manipulate HTTP headers using the appropriate ASP.NET Application
> Programming Interfaces (APIs).


  [1]: https://doc.sitecore.com/SdnArchive/upload/sitecore6/66/cache_configuration_reference_sc66-a4.pdf
  [2]: https://doc.sitecore.com/sdnarchive/upload/sitecore6/sc62keywords/cache_configuration_reference_a4.pdf