do not include content-length header in 304
This commit is contained in:
parent
8b920d9d56
commit
b4d05ac68b
|
@ -72,7 +72,12 @@ STATUS_CODES = {
|
|||
511: b'Network Authentication Required'
|
||||
}
|
||||
|
||||
EMPTY_STATUS_CODES = [204, 304]
|
||||
# These should all have no response body. The True/False indicates if they
|
||||
# should also include the content-length header.
|
||||
EMPTY_STATUS_CODES = {
|
||||
204: True,
|
||||
304: False
|
||||
}
|
||||
|
||||
|
||||
class BaseHTTPResponse:
|
||||
|
@ -198,13 +203,17 @@ class HTTPResponse(BaseHTTPResponse):
|
|||
if keep_alive and keep_alive_timeout is not None:
|
||||
timeout_header = b'Keep-Alive: %d\r\n' % keep_alive_timeout
|
||||
|
||||
body = b''
|
||||
content_length = 0
|
||||
if self.status not in EMPTY_STATUS_CODES:
|
||||
body = self.body
|
||||
content_length = self.headers.get('Content-Length', len(self.body))
|
||||
|
||||
body = self.body
|
||||
content_length = self.headers.get('Content-Length', len(self.body))
|
||||
self.headers['Content-Length'] = content_length
|
||||
|
||||
if self.status in EMPTY_STATUS_CODES:
|
||||
body = b''
|
||||
content_length = 0
|
||||
self.headers['Content-Length'] = content_length
|
||||
if not EMPTY_STATUS_CODES.get(self.status):
|
||||
del self.headers['Content-Length']
|
||||
|
||||
self.headers['Content-Type'] = self.headers.get(
|
||||
'Content-Type', self.content_type)
|
||||
|
||||
|
|
|
@ -99,12 +99,12 @@ def test_no_content(json_app):
|
|||
request, response = json_app.test_client.get('/no-content/unmodified')
|
||||
assert response.status == 304
|
||||
assert response.text == ''
|
||||
assert response.headers['Content-Length'] == '0'
|
||||
assert response.headers.get('Content-Length') == None
|
||||
|
||||
request, response = json_app.test_client.get('/unmodified')
|
||||
assert response.status == 304
|
||||
assert response.text == ''
|
||||
assert response.headers['Content-Length'] == '0'
|
||||
assert response.headers.get('Content-Length') == None
|
||||
|
||||
request, response = json_app.test_client.delete('/')
|
||||
assert response.status == 204
|
||||
|
|
Loading…
Reference in New Issue
Block a user