Telnet 到 Python 服务器卡住了
Telnet to Python server gets stuck
我正在准备一个演示,我想为其使用一个简单的服务器,而不是 nginx 或任何其他流行的服务器。
我从 python 官方页面得到了以下内容:
import SimpleHTTPServer
import SocketServer
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()
所以,我 运行 它,一切似乎都很好:
python -m SimpleHTTPServer 8000
如果我打开浏览器,或者卷曲 IP 地址,它工作正常:
xx.xx.xx.xx - - [31/May/2019 09:36:33] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:37:43] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:37:46] "HEAD / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:03] "HEAD / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:06] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:12] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:13] "GET / HTTP/1.1" 200 -
现在,当我通过 telnet
连接到服务器时 GET
,服务器卡住了:
$ telnet xx.xx.xx.xx 8000
Trying xx.xx.xx.xx...
Connected to xx.xx.xx.xx.
Escape character is '^]'.
GET / HTTP/1.1
...It just hangs here foever...
当我在服务器上点击 ctrl+c
时,它向我显示了一个发生的异常,我不知道在这种情况下如何解释:
^C----------------------------------------
Exception happened during processing of request from ('xx.xx.xx.xx', 47346)
Traceback (most recent call last):
File "/usr/lib/python3.5/socketserver.py", line 313, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python3.5/socketserver.py", line 341, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python3.5/socketserver.py", line 354, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python3.5/socketserver.py", line 681, in __init__
self.handle()
File "/usr/lib/python3.5/http/server.py", line 422, in handle
self.handle_one_request()
File "/usr/lib/python3.5/http/server.py", line 400, in handle_one_request
if not self.parse_request():
File "/usr/lib/python3.5/http/server.py", line 334, in parse_request
_class=self.MessageClass)
File "/usr/lib/python3.5/http/client.py", line 206, in parse_headers
line = fp.readline(_MAXLINE + 1)
File "/usr/lib/python3.5/socket.py", line 576, in readinto
return self._sock.recv_into(b)
KeyboardInterrupt
----------------------------------------
我还通过 SSH-ed 进入服务器 运行ning 所在的同一台机器,并发出连接到本地主机的请求。也吊死了。
我想知道:
telnet
GET 与其他 GET 有何不同。
- 在python服务器级别,异常是什么意思,如何解决。
- How is telnet GET different to other GETs.
telnet
这里没有区别。您的服务器正在挂起,因为它正在等待您完成输入 GET 请求。为此,您只需在输入 GET 请求后按 Enter
两次。
这是因为:
- 需要一个
CR-LF
字符来结束 HTTP 请求的消息 header 部分(按照指定 here)
- 另一个是实际的
CR-LF
告诉 telnet
你完成了输入
- At python server level, what does the exception mean, and how to solve it.
这只是您按下 Ctrl + C
的结果,因此中断了 Python 进程 运行 您的 SimpleHTTPServer
.
我正在准备一个演示,我想为其使用一个简单的服务器,而不是 nginx 或任何其他流行的服务器。
我从 python 官方页面得到了以下内容:
import SimpleHTTPServer
import SocketServer
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()
所以,我 运行 它,一切似乎都很好:
python -m SimpleHTTPServer 8000
如果我打开浏览器,或者卷曲 IP 地址,它工作正常:
xx.xx.xx.xx - - [31/May/2019 09:36:33] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:37:43] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:37:46] "HEAD / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:03] "HEAD / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:06] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:12] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:13] "GET / HTTP/1.1" 200 -
现在,当我通过 telnet
连接到服务器时 GET
,服务器卡住了:
$ telnet xx.xx.xx.xx 8000
Trying xx.xx.xx.xx...
Connected to xx.xx.xx.xx.
Escape character is '^]'.
GET / HTTP/1.1
...It just hangs here foever...
当我在服务器上点击 ctrl+c
时,它向我显示了一个发生的异常,我不知道在这种情况下如何解释:
^C----------------------------------------
Exception happened during processing of request from ('xx.xx.xx.xx', 47346)
Traceback (most recent call last):
File "/usr/lib/python3.5/socketserver.py", line 313, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python3.5/socketserver.py", line 341, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python3.5/socketserver.py", line 354, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python3.5/socketserver.py", line 681, in __init__
self.handle()
File "/usr/lib/python3.5/http/server.py", line 422, in handle
self.handle_one_request()
File "/usr/lib/python3.5/http/server.py", line 400, in handle_one_request
if not self.parse_request():
File "/usr/lib/python3.5/http/server.py", line 334, in parse_request
_class=self.MessageClass)
File "/usr/lib/python3.5/http/client.py", line 206, in parse_headers
line = fp.readline(_MAXLINE + 1)
File "/usr/lib/python3.5/socket.py", line 576, in readinto
return self._sock.recv_into(b)
KeyboardInterrupt
----------------------------------------
我还通过 SSH-ed 进入服务器 运行ning 所在的同一台机器,并发出连接到本地主机的请求。也吊死了。
我想知道:
telnet
GET 与其他 GET 有何不同。- 在python服务器级别,异常是什么意思,如何解决。
- How is telnet GET different to other GETs.
telnet
这里没有区别。您的服务器正在挂起,因为它正在等待您完成输入 GET 请求。为此,您只需在输入 GET 请求后按 Enter
两次。
这是因为:
- 需要一个
CR-LF
字符来结束 HTTP 请求的消息 header 部分(按照指定 here) - 另一个是实际的
CR-LF
告诉telnet
你完成了输入
- At python server level, what does the exception mean, and how to solve it.
这只是您按下 Ctrl + C
的结果,因此中断了 Python 进程 运行 您的 SimpleHTTPServer
.