Considering that max-age applies to all the caches, and s-maxage only applies to shared caches (proxy and gateway cache)....
Does it make sense to use both directives in a non-expirable and public page?
Controller pseudo-code:
w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");
return w;
Key point to note in the definition is share cache
From HTTP Header Field Definitions
It means that reverse proxy/caches like varnish, cloudfront, cloudflare can have a cache age different to browser cache. I would personally prefer value of
s-maxage
to be higher thanmaxage
In HTTP 1.1 once response is cached, you can't contact browser to invalidate cache but you can tell it to CDNs.
From HTTP Header Field Definitions:
Note, "overrides". So, it would only make sense if you intend to specify a different maximum age for shared caches as compared to
max-age
, which would be used by end users.In your particular example, they're the same, so specifying
s-maxage
is just unnecessary.