Index: Lib/http/server.py =================================================================== --- Lib/http/server.py (révision 87317) +++ Lib/http/server.py (copie de travail) @@ -169,14 +169,6 @@ Similarly, for output, lines ought to be separated by CRLF pairs but most clients grok LF characters just fine. - If the first line of the request has the form - - - - (i.e. is left out) then this is assumed to be an HTTP - 0.9 request; this form has no optional headers and data part and - the reply consists of just the data. - The reply form of the HTTP 1.x protocol again has three parts: 1. One line giving the response code @@ -249,8 +241,7 @@ # The default request version. This only affects responses up until # the point where the request line is parsed, so it mainly decides what # the client gets back when sending a malformed request line. - # Most web servers default to HTTP 0.9, i.e. don't send a status line. - default_request_version = "HTTP/0.9" + default_request_version = "HTTP/1.0" def parse_request(self): """Parse a request (internal). @@ -299,13 +290,6 @@ self.send_error(505, "Invalid HTTP Version (%s)" % base_version_number) return False - elif len(words) == 2: - [command, path] = words - self.close_connection = 1 - if command != 'GET': - self.send_error(400, - "Bad HTTP/0.9 request type (%r)" % command) - return False elif not words: return False else: @@ -442,17 +426,15 @@ message = self.responses[code][0] else: message = '' - if self.request_version != 'HTTP/0.9': - self.wfile.write(("%s %d %s\r\n" % - (self.protocol_version, code, message)).encode('ASCII', 'strict')) + self.wfile.write(("%s %d %s\r\n" % + (self.protocol_version, code, message)).encode('ASCII', 'strict')) def send_header(self, keyword, value): """Send a MIME header.""" - if self.request_version != 'HTTP/0.9': - if not hasattr(self, '_headers_buffer'): - self._headers_buffer = [] - self._headers_buffer.append( - ("%s: %s\r\n" % (keyword, value)).encode('ASCII', 'strict')) + if not hasattr(self, '_headers_buffer'): + self._headers_buffer = [] + self._headers_buffer.append( + ("%s: %s\r\n" % (keyword, value)).encode('ASCII', 'strict')) if keyword.lower() == 'connection': if value.lower() == 'close': @@ -462,10 +444,9 @@ def end_headers(self): """Send the blank line ending the MIME headers.""" - if self.request_version != 'HTTP/0.9': - self._headers_buffer.append(b"\r\n") - self.wfile.write(b"".join(self._headers_buffer)) - self._headers_buffer = [] + self._headers_buffer.append(b"\r\n") + self.wfile.write(b"".join(self._headers_buffer)) + self._headers_buffer = [] def log_request(self, code='-', size='-'): """Log an accepted request. Index: Lib/test/test_httpservers.py =================================================================== --- Lib/test/test_httpservers.py (révision 87317) +++ Lib/test/test_httpservers.py (copie de travail) @@ -133,7 +133,7 @@ self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEqual(res.status, 501) + self.assertEqual(res.status, 400) def test_version_none(self): self.con._http_vsn_str = '' @@ -491,10 +491,12 @@ self.assertEqual(result[-1], b'Data\r\n') def test_http_0_9(self): + # 0.9 is treated as 1.0 and returns a full response result = self.send_typical_request(b'GET / HTTP/0.9\r\n\r\n') - self.assertEqual(len(result), 1) - self.assertEqual(result[0], b'Data\r\n') + self.verify_http_server_response(result[0]) + self.verify_expected_headers(result[1:-1]) self.verify_get_called() + self.assertEqual(result[-1], b'Data\r\n') def test_with_continue_1_0(self): result = self.send_typical_request(b'GET / HTTP/1.0\r\nExpect: 100-continue\r\n\r\n')