id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux 22827,Per-site cache docs vague about which middleware sets headers,Keryn Knight ,nobody,"The [https://docs.djangoproject.com/en/dev/topics/cache/#the-per-site-cache docs] currently say: > Additionally, the cache middleware automatically sets a few headers in each HttpResponse: > > Sets the Last-Modified header to the current date/time when a fresh (not cached) version of the page is requested. > Sets the Expires header to the current date/time plus the defined CACHE_MIDDLEWARE_SECONDS. > Sets the Cache-Control header to give a max age for the page – again, from the CACHE_MIDDLEWARE_SECONDS setting. It's no longer clear ''which'' middleware does that, because these days what was once `CacheMiddleware` is now recommended as two separate components, `UpdateCacheMiddleware` and `FetchFromCacheMiddleware`. It is the [https://github.com/django/django/blob/c083e3815aec23b99833da710eea574e6f2e8566/django/middleware/cache.py#L99 UpdateCacheMiddleware] that is responsible for modifying the Response's headers. And, if being really picky: > The cache middleware caches GET and HEAD responses with status 200, where the request and response headers allow This is dictated by the [https://github.com/django/django/blob/c083e3815aec23b99833da710eea574e6f2e8566/django/middleware/cache.py#L129 FetchFromCacheMiddleware] at the beginning of the request",Cleanup/optimization,closed,Documentation,dev,Normal,fixed,,,Accepted,1,0,0,0,0,0