微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 HTTP/2 设置 Quart 服务器

如何解决使用 HTTP/2 设置 Quart 服务器

我正在尝试设置一个 Quart 服务器来使用 HTTP/2。我一直在尝试阅读最少的文档:

我在哪里:

$ cat app.py
from quart import Quart,render_template,websocket

app = Quart(__name__)

@app.route("/")
async def hello():
    return await render_template("index.html")

@app.route("/api")
async def json():
    return {"hello": "world"}

@app.websocket("/ws")
async def ws():
    while True:
        await websocket.send("hello")
        await websocket.send_json({"hello": "world"})

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=5001)

一些基本检查:

$ curl -I --http2 http://acme.corp:5001
HTTP/1.1 101
date: Tue,02 Mar 2021 10:05:12 GMT
server: hypercorn-h11
connection: upgrade
upgrade: h2c

HTTP/2 200
content-type: text/html; charset=utf-8
content-length: 0
date: Tue,02 Mar 2021 10:05:12 GMT
server: hypercorn-h2

查看输出

$ python3 app.py
 * Serving Quart app 'app'
 * Environment: production
 * Please use an Asgi server (e.g. Hypercorn) directly in production
 * Debug mode: False
 * Running on http://0.0.0.0:5001 (CTRL + C to quit)
[2021-03-02 11:01:49,083] Running on http://0.0.0.0:5001 (CTRL + C to quit)
[2021-03-02 11:01:53,011] 10.221.0.114:53637 GET / 1.1 200 0 5817
[2021-03-02 11:01:53,255] 10.221.0.114:53637 GET /favicon.ico 1.1 404 103 1348

当我从 chrome 加载 index.html 页面时,这是我看到的:

enter image description here

从 chrome 获取 http/2 缺少什么?

解决方法

您在本地将不安全的 HTTP 1.1 请求升级为不安全的 HTTP 2 请求。这适用于 Quart 和 curl,但包括 chrome 在内的浏览器可以not support insecure (unencrypted) HTTP/2。为了让它在 chrome 中工作,我创建了一个自签名证书,将 certfile 和 keyfile 选项传递给运行,并在访问该站点时接受 chrome 提供的警告。一个例子存在here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。