Opened 11 days ago

Closed 5 days ago

Last modified 5 days ago

#28786 closed Cleanup/optimization (fixed)

Document middleware ordering considerations due to CommonMiddleware setting Content-Length

Reported by: spudnica Owned by: nobody
Component: Documentation Version: 1.11
Severity: Normal Keywords: content-length, commonMiddleware, development-server
Cc: Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by spudnica)

Hi!

After updating to Django 1.11 I cant display pages in Chrome, due to error printed in Chrome console: net::ERR_CONTENT_LENGTH_MISMATCH

The above error does not occur in Mozilla or IE. When I delete lines responsible for Content-Length header from CommonMiddleware error disappears and my site works just fine.

Its not just mine Chrome, I tested issue on few PCs.

Change History (9)

comment:1 Changed 11 days ago by spudnica

Description: modified (diff)

comment:2 Changed 11 days ago by Tim Graham

I think we'll need more details about how to reproduce the problem.

comment:3 in reply to:  2 Changed 11 days ago by spudnica

Description: modified (diff)

Replying to Tim Graham:

I think we'll need more details about how to reproduce the problem.

  1. I guess the issue is related to way that content-length is calculated. If I manually set content-length to match particular page I request for, I am able to open this in Chrome. It seems that str(len(response.content)) is not returning proper reponse length i CommonMiddleware for me and firefox was just ignoring it.
  2. If I order CommonMiddleware at first place in my middlewares list, site is working properly, though it is against reccommendations in Django docs guide Middleware ordering.
  3. If i disable all middlewares that are added to site by myself, and place CommonMiddleware in right order, the error doesnt occur, so its realted to way how the length size calculated.
Last edited 11 days ago by spudnica (previous) (diff)

comment:4 Changed 11 days ago by Tim Graham

Can you provide a sample project that demonstrates the problem?

comment:5 Changed 11 days ago by spudnica

Error is related to middleware order. If the content is modified after calculation of length (and in my case it was) comparison between values always returns False. I guess it affects everyone with apps like django-livereload or similar apps, which injects content into site. Is this header necessary to exist because of security or some different point?

Its worth to add info about order of middlewares to release notes of version 1.11, to prevent people from digging through internet.

Last edited 11 days ago by spudnica (previous) (diff)

comment:6 Changed 11 days ago by Tim Graham

Component: Core (Other)Documentation
Has patch: set
Summary: Content-Length mismatch on ChromeDocument middleware ordering considerations due to CommonMiddleware setting Content-Length
Type: UncategorizedCleanup/optimization

PR to mention that consideration in the release notes.

Last edited 11 days ago by Tim Graham (previous) (diff)

comment:7 Changed 5 days ago by Tim Graham <timograham@…>

Resolution: fixed
Status: newclosed

In bc95314c:

Fixed #28786 -- Doc'd middleware ordering considerations due to CommonMiddleware setting Content-Length.

comment:8 Changed 5 days ago by Tim Graham <timograham@…>

In 3f372ef9:

[2.0.x] Fixed #28786 -- Doc'd middleware ordering considerations due to CommonMiddleware setting Content-Length.

Backport of bc95314ca6af0b5e993ae07fdc7d8e6166d3b8ca from master

comment:9 Changed 5 days ago by Tim Graham <timograham@…>

In afcde504:

[1.11.x] Fixed #28786 -- Doc'd middleware ordering considerations due to CommonMiddleware setting Content-Length.

Backport of bc95314ca6af0b5e993ae07fdc7d8e6166d3b8ca from master

Note: See TracTickets for help on using tickets.
Back to Top