I've been looking at an issue where a revalidation of a stale cache entry fails because the 304 response on the revalidation doesn't contain its own CC or Expires but the URL has a query string. This kicks the revalidation response out of the cache save filter early and we never get to look at the stale handle and update the headers.
This is also one of the FIXME cases where the 304 still leaks out to a non-conditional request. Part of me wants to merge the Expires/CC headers earlier, or load up the local variables with what we'd end up merged for Expires and CC. But since it's just two headers, part of me wants to peek at them earlier but leave them as distinct things being tracked in that early if/else/ for the various reasons. In the same neighborhood, we are missing a httpbis clarification about not using Expires when we have parsed CC: s-maxage. On this fork of the problem I looked at, some third-party component had added a mystery Expires: $longago to the response to accompany a cookie. Anyone with strong feelings or insight about either of these cases? I might not come back to it until the new year.
