equal
deleted
inserted
replaced
|
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 |