app/django/http/utils.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
equal deleted inserted replaced
53:57b4279d8c4e 54:03e267d67478
       
     1 """
       
     2 Functions that modify an HTTP request or response in some way.
       
     3 """
       
     4 
       
     5 # This group of functions are run as part of the response handling, after
       
     6 # everything else, including all response middleware. Think of them as
       
     7 # "compulsory response middleware". Be careful about what goes here, because
       
     8 # it's a little fiddly to override this behavior, so they should be truly
       
     9 # universally applicable.
       
    10 
       
    11 def fix_location_header(request, response):
       
    12     """
       
    13     Ensures that we always use an absolute URI in any location header in the
       
    14     response. This is required by RFC 2616, section 14.30.
       
    15 
       
    16     Code constructing response objects is free to insert relative paths, as
       
    17     this function converts them to absolute paths.
       
    18     """
       
    19     if 'Location' in response and request.get_host():
       
    20         response['Location'] = request.build_absolute_uri(response['Location'])
       
    21     return response
       
    22 
       
    23 def conditional_content_removal(request, response):
       
    24     """
       
    25     Removes the content of responses for HEAD requests, 1xx, 204 and 304
       
    26     responses. Ensures compliance with RFC 2616, section 4.3.
       
    27     """
       
    28     if 100 <= response.status_code < 200 or response.status_code in (204, 304):
       
    29        response.content = ''
       
    30        response['Content-Length'] = 0
       
    31     if request.method == 'HEAD':
       
    32         response.content = ''
       
    33     return response