We are experiencing some unusual behaviour regarding Dispatcher. If we make a request to a page that should not be cached according to out dispatcher rules, and the request contains query parameters, then the response is missing the Cache-Control header.
I did not realise the cache control: max-age=0 was not a Dispatcher out of the box feature, sorry.
In our Apache web server, we are adding the "cache-control: max-age=0, no-cache, no-store, must-revalidate" to all responses that do not contain the Etag header, as this means the page is not cached. This works as expected if the request does not contain a query string, but if the request does contain a query string then we do not see the cache-control header, even though Etag is missing. It is as if something is removing the cache-control header for requests with query strings. We have Cache-Control in our /headers config.