Opened 6 years ago
Last modified 6 years ago
#30812 closed Cleanup/optimization
ConditionalGetMiddleware returns 304 if ETag is the same but Last-Modified has changed. — at Version 1
| Reported by: | Flavio Curella | Owned by: | nobody |
|---|---|---|---|
| Component: | Core (Cache system) | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
ConditionalGetMiddleware in combination with apache x-sendfile (django-sendfile) doesn't work properly.
Each response gets a ETag generated based on response.content which is an empty string in the case of a x-sendfile response, so each time the file is accessed, the ETag generated by ConditionalGetMiddleware is the same. Regardless of the changed file/changed mtime. In get_conditional_response() the ETag (which is always the same hash of empty string) is checked first and returns a 304 because it ignores Last-Modified time. Django shouldn't return 304 if ETag is the same but Last-Modified has changed.
Related with #29241.
Change History (1)
comment:1 by , 6 years ago
| Description: | modified (diff) |
|---|---|
| Summary: | Return a 304 if ETag is the same but Last-Modified has changed → ConditionalGetMiddleware returns 304 if ETag is the same but Last-Modified has changed. |
| Triage Stage: | Unreviewed → Accepted |
| Version: | 2.2 → master |
Thanks for the ticket (please try to add more descriptive description in the future).