This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2016年03月17日 07:42 by xiang.zhang, last changed 2022年04月11日 14:58 by admin.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| force-0.9.patch | martin.panter, 2016年10月29日 00:51 | review | ||
| Messages (6) | |||
|---|---|---|---|
| msg261898 - (view) | Author: Xiang Zhang (xiang.zhang) * (Python committer) | Date: 2016年03月17日 07:42 | |
BaseHTTPRequestHandler in http.server supports HTTP/0.9. But the response for HTTP/0.9 request is implemented wrong. Response of HTTP/0.9 request returns message body directly without status line and headers. But if you inherit BaseHTTPRequestHandler and set the default_request_version to "HTTP/1.x", then self.request_version can never be "HTTP/0.9" since in the https://hg.python.org/cpython/file/tip/Lib/http/server.py#l315 branch it does not set version to "HTTP/0.9" and then always sends the status line and headers back. A trivial patch can fix this problem that set version to "HTTP/0.9" in the branch. But this will cause some failure in tests. The tests in test_httpservers use http.client.HTTPConnection to send and receive HTTP message. But since 3.4, HTTPConnection doesn't support HTTP/0.9-style simple responses. We can use it to test HTTP/0.9 connection if the server is implemented in the right way. And since http.client.HTTPConnection has dropped the support for HTTP/0.9, is it reasonable to drop the support in http.server too? |
|||
| msg261899 - (view) | Author: Xiang Zhang (xiang.zhang) * (Python committer) | Date: 2016年03月17日 07:45 | |
can should be can not. And not only HTTPConnection, support for HTTP/0.9 seems to have been totally abandoned since Python3.4 in http.client. |
|||
| msg261949 - (view) | Author: Martin Panter (martin.panter) * (Python committer) | Date: 2016年03月18日 07:21 | |
As I understand it, you are saying if you override the undocumented (but publicly-named) default_request_version attribute, HTTP 0.9 requests no longer work. I suspect it is even broken by default. My understanding is with HTTP 0.9 you should be able to send b"GET <path>\r\n" and get a response, but Python’s server will deadlock waiting for a second blank line or EOF. It looks like this deadlock has been there since ~forever (1995). See Issue 10721 which already proposes to remove 0.9 server support. I would be weakly in favour of this (or more strongly if someone can prove my theory that the current support is broken). |
|||
| msg261952 - (view) | Author: Xiang Zhang (xiang.zhang) * (Python committer) | Date: 2016年03月18日 09:35 | |
I think you are right. Simply run http.server.test() and then telnet to send "GET /", the client hangs. Or add a timeout to BaseHTTPRequestHandler, you can see the timeout error on server output. |
|||
| msg279642 - (view) | Author: Martin Panter (martin.panter) * (Python committer) | Date: 2016年10月29日 00:51 | |
Since my last comment, I have become more confident that Python’s request parsing never supported proper HTTP 0.9. So I would prefer to remove it in the next version of Python, and not bother fixing Xiang’s bug in existing versions (unless someone offers a practical reason to fix it). For the record, this patch is what a fix might look like. |
|||
| msg279671 - (view) | Author: Xiang Zhang (xiang.zhang) * (Python committer) | Date: 2016年10月29日 11:19 | |
> So I would prefer to remove it in the next version of Python, and not bother fixing Xiang’s bug in existing versions. +1. In rfc7230, "The expectation to support HTTP/0.9 requests has been removed". |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:28 | admin | set | github: 70765 |
| 2016年10月29日 11:19:59 | xiang.zhang | set | messages: + msg279671 |
| 2016年10月29日 00:51:04 | martin.panter | set | files:
+ force-0.9.patch keywords: + patch messages: + msg279642 |
| 2016年10月28日 23:01:22 | barry | set | nosy:
+ barry |
| 2016年08月11日 10:20:26 | martin.panter | set | dependencies: + Remove HTTP 0.9 server support |
| 2016年03月18日 09:35:55 | xiang.zhang | set | messages: + msg261952 |
| 2016年03月18日 07:21:46 | martin.panter | set | messages: + msg261949 |
| 2016年03月18日 03:01:26 | xiang.zhang | set | type: behavior |
| 2016年03月18日 02:58:20 | xiang.zhang | set | nosy:
+ gregory.p.smith, martin.panter |
| 2016年03月17日 07:45:33 | xiang.zhang | set | messages: + msg261899 |
| 2016年03月17日 07:42:36 | xiang.zhang | create | |