首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python 3中请求HTTP/2转换协议

在python 3中请求HTTP/2转换协议
EN

Stack Overflow用户
提问于 2016-03-22 15:20:07
回答 1查看 2.9K关注 0票数 0

我试图检查http服务是否支持使用python 3脚本的HTTP/2。不幸的是,经过了很多研究和花了很多时间在我的脚本,我没有执行它。

我所拥有的是:

代码语言:javascript
复制
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上的脚本示例:

代码语言:javascript
复制
➜  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 .

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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项目

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36158373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档