If you want to change the headers that are set within the request and you want the browsers and intermediate servers (proxies, etc.) to cache the data (and you will have no control about the cache expiration), you can follow the steps below:
The first option would be to modify the portal template page which you can find at /CMSPages/PortalTemplate.aspx which is the source template of any page generated by Kentico.
In the code of the page you will see following control:
<asp:Literal runat="server" ID="tags" EnableViewState="false" />
This control is populated in OnPreRender method via:
// Init the header tags
tags.Text = HeaderTags;
Although this can cause a problem with future upgrades and hotfixes as it may get overridden. So, make a proper note in the project documentation. In the debug you can find the code that is filled into the header tags and what can be modified.
Secondly you may clear and create custom response headers:
Response.AddHeader("Cache-Control", "no-cache, must-revalidate");
And lastly would be creating custom headers via custom web part in this way second approach would be contained within a reusable control. Also, there is a KB article on this topic available which is still valid.