How would it be possible to unset the "Cache-Control: must-revalidate, no-cache, private" that drupal adds for logged in users, for a specific role? I want a specific role, to follow the non-authenticated users cache flow.

More specifically: We're allowing users to login to our site with a specific "guest" role. This allows them to visit 1 personalized page. Our goal is that non-authenticated user and the GUEST are being served cached nginx pages. However, all content is cached with NGINX and is served based on a combination of the SESS cookie(drupal sets that for logged in users) and the HEADERS for each response. All logged in users have the SESS cookie set, however the guest has an additional cookie that tells NGINX to ignore SESS. The second part of the response is related to the headers drupal sends. Drupal identifies that the user is logged in and sets everything to ""Cache-Control: must-revalidate, no-cache, private" instead of "Cache-Control: public, max-age 86400", that leads to our guests getting cache MISS instead of HIT

  • That header is only part of the story. It will tell browsers and other agents not to cache but altering it won't affect Drupal's own caching, which is much more significant. But trying to mess with that for a logged-in user is likely to have all sorts of weird side-effects. Please explain more about what you are trying to achieve. Oct 3, 2019 at 9:34
  • edited with a bigger description Oct 3, 2019 at 9:45
  • Sounds like something you could sort out purely in nginx, I think, by rewriting the headers there. Not an expert but I have done similar in Varnish. Oct 3, 2019 at 10:20
  • 2
    You can change any header in a response event subscriber, see for example drupal.stackexchange.com/questions/188924/…
    – 4uk4
    Oct 3, 2019 at 11:08
  • The problem on that approach would be that you're overwriting the what drupal also believes should be cached or not. Thanks for the response though, it seems that it is the only alternative. Oct 4, 2019 at 8:26


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Browse other questions tagged or ask your own question.