What’s the difference between the following three .htaccess rules and when to use each, is there any special use cases that prefers one over the other?:
Header set Cache-Control "max-age=290304000"
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"
ExpiresDefault "access plus 10 years"
Headeris a directive of mod_headers that allows to modify HTTP header fields. In this caseHeader seteffectively sets the mentioned header fields Cache-Control and Expires, so an already existing header field will be overwritten.The first directive sets the header field Cache-Control with the value
max-age=290304000, that describes the freshness lifetime to be 290304000 seconds relative to the response time.In contrast to that, the second directive sets the header field Expires with the value
Thu, 15 Apr 2020 20:00:00 GMTthat describes the freshness lifetime with an absolute time value.Both Cache-Control’s max-age value and Expires expiration time stamp can be transformed to the other:
But if both are present, Cache-Control’s max-age is preferred over Expires:
Instead of setting these HTTP caching control header fields manually, mod_expires
ExpiresDefaultdirective allows an easy setup for HTTP caching. The freshness lifetime can either be described with an absolute value or with a relative value, either relative to the response time (i.e.access/now) or relative to the modification time of the requested file (i.e.modification). It uses both Cache-Control and Expires.In this case the third directive sets the default freshness lifetime to be 10 years from the time of response on.
I would use mod_expires for HTTP cache control instead of doing it manually with
Header. It is far more convenient, allows both relative and absolute freshness times and uses both Cache-Control and Expires.