I'm not sure of any global way to do it by configuration (doesn't mean there isn't a way, I just don't know of one without researching it).
In mojoPortal CMS pages there is a page setting that determines whether browser caching is allowed and we enforce it from code that sets those headers in Default.aspx which serves the cms pages:
if (!CurrentPage.AllowBrowserCache)
{
SecurityHelper.DisableBrowserCache();
}
the code for the helper method is like this:
public static void DisableBrowserCache()
{
if (HttpContext.Current != null)
{
HttpContext.Current.Response.Cache.SetExpires(new DateTime(1995, 5, 6, 12, 0, 0, DateTimeKind.Utc));
HttpContext.Current.Response.Cache.SetNoStore();
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
HttpContext.Current.Response.Cache.AppendCacheExtension("post-check=0,pre-check=0");
}
}
Generally since we are customizing the page per user, ie showing some links (sign in, edit links etc) depending on whether they are authenticated and what roles they have it can be problematic to allow browser caching. Especially because we don't know if the client machine is shared by multiple users, with caching there would be a potential to render something incorrect from the browser cache.
Hope that helps,
Joe