2

Under this link you have some examples on how to set Cache-Control headers in Apache2 server. So generally, there are three different approaches to have these headers set:

  1. Using both mod_expires + mod_headers
  2. Using only mod_headers
  3. Using only mod_expires

Are there any significant differences between them? Which one is the preferred one and why, or maybe it doesn't matter at all? What's the best way to set Cache-Control headers in Apache2?

Mikhail Morfikov
  • 966
  • 1
  • 10
  • 12

1 Answers1

2

The main difference is that mod_expires will not replace/update Cache-Control headers if an Expires header has already been set by your web application or script and can't really be used to set anything besides the max-age Cache Control header.

The Header directive from mod_headers on the other hand can be configured to not be as considerate and will also happily merge or completely replace any existing headers to new headers you specify. That allows you to override whatever (default and not configurable) Cache-Control headers your web applications or scripts set, as well as set any other headers.

As far as I know mod_headers does not provide an interface to do the calculations that mod_expires does to calculate future dates i.e to set the Expires header to a time stamp of now + 1 month you can't use the Header directive.

So the modules are complementary.

HBruijn
  • 77,029
  • 24
  • 135
  • 201
  • 1
    Good answer. Also mod_headers is needed to add the directives other than max-age (e.g. public, private, no-store...etc.) as shown in OPs original link. This is, as you state, to compliment max-age set by mod_expires. – Barry Pollard Jul 31 '16 at 17:30