首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >采用纯http2 (h2c)的双绞线h2c服务器

采用纯http2 (h2c)的双绞线h2c服务器
EN

Stack Overflow用户
提问于 2020-10-16 03:18:09
回答 1查看 259关注 0票数 0

Twisted支持http1 + http2。如何通过TCP设置一个扭曲的http2服务器(不是ALPN或协议升级)?

服务器应该回答这个问题:

代码语言:javascript
复制
curl --http2-prior-knowledge http://localhost:8000/
EN

回答 1

Stack Overflow用户

发布于 2020-10-20 02:12:48

Twisted应该会自动神奇地为你设置HTTP/2服务器。确保你安装了twisted的http2模块。最简单的方法是使用pip

代码语言:javascript
复制
pip install -U twisted[http2]

然而,我注意到有几次它不能直接运行HTTP/2的东西。我不得不卸载h2hyperhyperframe,然后重新安装它们。

代码语言:javascript
复制
pip uninstall h2 hyperframe hyper
pip install -U twisted[http2]

下面是一个使用自签名证书的小型klein here服务器示例。

代码语言:javascript
复制
openssl genrsa -aes256 -passout pass:SuperSecretPassword -out server.key 4096
openssl req -new -key server.key -passin pass:SuperSecretPassword -out server.csr
# Common Name (e.g. server FQDN or YOUR name) []:localhost
openssl x509 -req -passin pass:SuperSecretPassword -days 365 -in server.csr -signkey server.key -out server.crt
openssl rsa -in server.key -out server_no_pass.key -passin pass:SuperSecretPassword
mv server_no_pass.key server.key
cat server.crt server.key > selfsigned.pem
rm server.crt server.csr server.key
代码语言:javascript
复制
from klein import route, run

@route("/")
def hello(req):
    if req.clientproto == b"HTTP/2":
        return "http2"
    return "http1.1"

run(endpoint_description="ssl:8000:privateKey=selfsigned.pem")

更新

虽然这不是最佳实践,但没有什么可以阻止您在非TLS连接上运行HTTP/2服务器。我相信大多数浏览器都不会支持非TLS HTTP/2服务器(至少我不能让Firefox和Chrome使用它)。Twisted也不适合你,所以这意味着你必须实现你自己的服务器。沿着twisted example on the hyper-h2 site行驶。然后用endpoints.TCP4ServerEndpoint替换endpoints.SSL4ServerEndpoint

代码语言:javascript
复制
# ...

endpoint = endpoints.TCP4ServerEndpoint(reactor, 8080, backlog=128)
endpoint.listen(H2Factory(root))
reactor.run()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64378351

复制
相关文章

相似问题

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