python
(python2.7, windows10)上最简单的web服务器:
python -mSimpleHTTPServer
返回静态文件。curl
表示正在使用该协议HTTP/1.0
(与 HTTPServer 文档匹配):
curl -s -D - http://localhost:8000/foo.jpg -o nul
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.11
Date: Sun, 07 Aug 2016 07:21:20 GMT
Content-type: image/jpeg
Content-Length: 25803
Last-Modified: Thu, 30 Jun 2016 06:13:58 GMT
同时,当通过浏览器(Chrome、Firefox)请求时,结果HTTP/1.1
(通过开发人员控制台可见,在选项卡上network
):
HTTP/1.1 200 OK
Server: SimpleHTTP/0.6 Python/2.7.11
Date: Sun, 07 Aug 2016 07:21:42 GMT
Content-type: image/jpeg
Content-Length: 25803
Last-Modified: Thu, 30 Jun 2016 06:13:58 GMT
因此,浏览器不会在请求后关闭连接。
print
在这两种情况下,源中帮助的输出BaseHTTPServer.py
将客户端查询的第一行显示为GET /foo.jpg HTTP/1.1
. 在两种情况下的响应中 x (也在print
服务器代码中)第一行是:HTTP/1.0 200 OK
。
不使用代理服务器。
如果您从虚拟机的浏览器请求,则 http 版本不会更改(保持不变HTTP/1.0
)。
造成这种差异的原因可能是什么?
罪魁祸首原来是 ESET Smart Security 9。事实证明,禁用
Приостановить работу файервола (разрешить весь трафик)
是不够的。在详细设置中发现了一个选项:禁用时,协议停止转换为 http1.1。