﻿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 <django@…>	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
