# self._request_start_line.version or
# start_line.version?
self._request_start_line.version == 'HTTP/1.1' and
- # 304 responses have no body (not even a zero-length body), and so
- # should not have either Content-Length or Transfer-Encoding.
- # headers.
+ # 1xx, 204 and 304 responses have no body (not even a zero-length
+ # body), and so should not have either Content-Length or
+ # Transfer-Encoding headers.
start_line.code not in (204, 304) and
+ (start_line.code < 100 or start_line.code >= 200) and
# No need to chunk the output if a Content-Length is specified.
'Content-Length' not in headers and
# Applications are discouraged from touching Transfer-Encoding,
if self._status_code in (204, 304):
assert not self._write_buffer, "Cannot send body with %s" % self._status_code
self._clear_headers_for_304()
- elif "Content-Length" not in self._headers:
+ elif ("Content-Length" not in self._headers and
+ (self._status_code < 100 or self._status_code >= 200)):
content_length = sum(len(part) for part in self._write_buffer)
self.set_header("Content-Length", content_length)