#26293: Warnings regarding 404s logged for URLs missing trailing slashes
-------------------------------------+-------------------------------------
Reporter: jklaiho | Owner: the-kid89
Type: Bug | Status: assigned
Component: HTTP handling | Version: 1.9
Severity: Normal | Resolution:
Keywords: CommonMiddleware | Triage Stage:
404 logging regression | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by the-kid89):
* owner: nobody => the-kid89
* status: new => assigned
Old description:
> I recently deployed a project into production using Django 1.9.2 and
> started getting strange logged warning messages from Sentry for 404's.
> Looking into it, this occurred in
> `django.core.handers.base.BaseHandler.get_response` and was related to
> people visiting URLs without trailing slashes.
>
> I compared the behaviour against an earlier, similarly configured project
> still running Django 1.7.x and this didn't occur there.
>
> Digging deeper, it seems that commit
> [https://github.com/django/django/commit/434d309ef6dbecbfd2b322d3a1da78aa5cb05fa8
> #diff-1f8be0eae49a1bf37d52829eaeda6a4e 434d309e] to fix [ticket:24720]
> inside `CommonMiddleware` was causing this. In lines 56-66 (58-68 in
> 1.9.2), the path is only checked for a missing slash if the prerequisites
> for `PREPEND_WWW` processing are met, since they are indented beneath it.
> This doesn't really make sense, since the two settings are not
> interdependent.
>
> As a result, an `Http404` is raised after request middleware processing
> in `BaseHandler.get_response`, at which point a warning is logged—for
> every single request for a path without a trailing slash.
>
> `APPEND_SLASH` still takes effect eventually, but only when
> `CommonMiddleware` is called again, this time for `process_response`,
> whereupon the normal redirect gets done. Thanks to this, everything
> appears to function normally for the end user, but unnecessary 404
> warnings end up getting logged. (Though if `APPEND_SLASH` was `False`,
> you'd probably want them logged.)
>
> It seems to me that `CommonMiddleware.process_request` needs a bit of
> reworking to run the checks for `PREPEND_WWW` and `APPEND_SLASH`
> independently, and to determine the need for a redirect based on whether
> at least one of these is necessary, still fulfilling the purpose of
> [ticket:24720]. I've provisionally marked the ticket as "easy pickings",
> as it seems to be that way from my admittedly limited research into this.
New description:
I took a look over it and you are correct that APPEND_SLASH wil not run
unless PREPEND_WWW is also set. =
I recently deployed a project into production using Django 1.9.2 and
started getting strange logged warning messages from Sentry for 404's.
Looking into it, this occurred in
`django.core.handers.base.BaseHandler.get_response` and was related to
people visiting URLs without trailing slashes.
I compared the behaviour against an earlier, similarly configured project
still running Django 1.7.x and this didn't occur there.
Digging deeper, it seems that commit
[https://github.com/django/django/commit/434d309ef6dbecbfd2b322d3a1da78aa5cb05fa8
#diff-1f8be0eae49a1bf37d52829eaeda6a4e 434d309e] to fix [ticket:24720]
inside `CommonMiddleware` was causing this. In lines 56-66 (58-68 in
1.9.2), the path is only checked for a missing slash if the prerequisites
for `PREPEND_WWW` processing are met, since they are indented beneath it.
This doesn't really make sense, since the two settings are not
interdependent.
As a result, an `Http404` is raised after request middleware processing in
`BaseHandler.get_response`, at which point a warning is logged—for every
single request for a path without a trailing slash.
`APPEND_SLASH` still takes effect eventually, but only when
`CommonMiddleware` is called again, this time for `process_response`,
whereupon the normal redirect gets done. Thanks to this, everything
appears to function normally for the end user, but unnecessary 404
warnings end up getting logged. (Though if `APPEND_SLASH` was `False`,
you'd probably want them logged.)
It seems to me that `CommonMiddleware.process_request` needs a bit of
reworking to run the checks for `PREPEND_WWW` and `APPEND_SLASH`
independently, and to determine the need for a redirect based on whether
at least one of these is necessary, still fulfilling the purpose of
[ticket:24720]. I've provisionally marked the ticket as "easy pickings",
as it seems to be that way from my admittedly limited research into this.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/26293#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/065.514118a6750804c7c039317861dc2904%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.