我试图检查http服务是否支持使用python 3脚本的HTTP/2。不幸的是,经过了很多研究和花了很多时间在我的脚本,我没有执行它。
我所拥有的是:
import sys
import http.client as HttpClient
h2c = {
"User-agent": 'python/' + str(sys.version.split()[0]),
"Connection": "Upgrade, HTTP2-Settings",
"Upgrade": "h2c",
"HTTP2-Settings": "AAMAAABkAAQAAP__",
"Accept": "*/*"
}
c = HttpClient.HTTPSConnection(ip, port) # IP and port given in arguments
c.request('HEAD', '/', None, h2c)
r = c.getresponse()
# Print result (see below)我知道它存在超高压,但我并不总是想要SSL,目前证书验证不能用超级程序禁用。
这里有一个运行在localhost上的脚本示例:
➜ http2 git:(master) ✗ python3 main.py -i localhost -p 443
HEAD / HTTP/1.1
Host: localhost
Upgrade: h2c
User-agent: python/3.4.2
Accept: */*
Connection: Upgrade, HTTP2-Settings
HTTP2-Settings: AAMAAABkAAQAAP__
HTTP/1.1 200 OK
Server: nginx/1.9.12
Date: Tue, 22 Mar 2016 15:05:15 GMT
Content-Type: text/html
Content-Length: 867
Last-Modified: Mon, 21 Mar 2016 10:03:18 GMT
Connection: keep-alive
ETag: "56efc6e6-363"
Accept-Ranges: bytes我检查了并在nginx服务器上启用了HTTP/2 (使用curl --http2)
如果有人想强迫服务器回复HTTP 101 .
发布于 2016-03-22 20:16:11
可以通过两种方式协商HTTP/2 :通过ALPN通过TLS或通过明文HTTP/1.1升级。
这里所做的是两种方法的混合:使用TLS连接和发送HTTP/1.1升级。
您应该做的是使用TLS连接,指定带有客户端支持的协议列表的ALPN扩展(在您的例子中,至少是h2),然后--如果服务器接受使用HTTP/2 --开始直接发送HTTP/2帧(而不是HTTP/1.1升级)。
我不是Python专家,但是可以指定ALPN协议,参见这里和这里。
您还想看看实现了HTTP/2的其他Python项目。
https://stackoverflow.com/questions/36158373
复制相似问题