mirror of
https://github.com/django/django.git
synced 2025-03-31 11:37:06 +00:00
We now have automatic HEAD processing always (previously required ConditionalGetMiddleware), middleware benefits from the Location header rewrite, so they can use relative URLs as well, and responses with response codes 1xx, 204 or 304 will always have their content removed, in accordance with the HTTP spec (so it's much harder to indavertently deliver invalid responses). Based on a patch and diagnosis from regexbot@gmail.com. git-svn-id: http://code.djangoproject.com/svn/django/trunk@6662 bcc190cf-cafb-0310-a4f2-bffc1f526a37
35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
"""
|
|
Functions that modify an HTTP request or response in some way.
|
|
"""
|
|
|
|
# This group of functions are run as part of the response handling, after
|
|
# everything else, including all response middleware. Think of them as
|
|
# "compulsory response middleware". Be careful about what goes here, because
|
|
# it's a little fiddly to override this behaviour, so they should be truly
|
|
# universally applicable.
|
|
|
|
def fix_location_header(request, response):
|
|
"""
|
|
Ensures that we always use an absolute URI in any location header in the
|
|
response. This is required by RFC 2616, section 14.30.
|
|
|
|
Code constructing response objects is free to insert relative paths and
|
|
this function converts them to absolute paths.
|
|
"""
|
|
if 'Location' in response and request.get_host():
|
|
response['Location'] = request.build_absolute_uri(response['Location'])
|
|
return response
|
|
|
|
def conditional_content_removal(request, response):
|
|
"""
|
|
Removes the content of responses for HEAD requests, 1xx, 204 and 304
|
|
responses. Ensures compliance with RFC 2616, section 4.3.
|
|
"""
|
|
if 100 <= response.status_code < 200 or response.status_code in (204, 304):
|
|
response.content = ''
|
|
response['Content-Length'] = 0
|
|
if request.method == 'HEAD':
|
|
response.content = ''
|
|
return response
|
|
|