fastapi如何使用http2
以前fastapi支持的服务器只是uvicorn、但是现在我看官网上显示也支持了Hypercorn等。
Hypercorn是支持http2的,这里写一个教程,介绍如何使用fastapi和Hypercorn开启http2。
安装Hypercorn和fastapi
pip install hypercorn
pip install fastapi
写个脚本
创建一个python文件,文件名为:myapp.py
, 内容如下:
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
然后运行这个文件:
hypercorn myapp:app
然后查看上面的api的文档(在链接后面加上/doc就行):http://127.0.0.1:8000/docs
然后浏览器打开检查,就会发现我们当前的服务器依然是HTTP/1.1 。
原因是:http2是强制加密的,所以需要安装证书才行。
安装证书
运行这个命令即可
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
会让你输入很多信息,瞎写就行,然后就会在这个目录下生成两个文件:
有上面两个文件之后,再次开启服务。
再跑一次
hypercorn --keyfile key.pem --certfile cert.pem myapp:app
然后再查看上面的api的文档(在链接后面加上/doc就行):http://127.0.0.1:8000/docs。
这个时候打开chrome是访问不了的,提醒你“您的连接不是私密连接”。
这个时候只要在这个页面,然后键盘输入:thisisunsafe
。 不是在地址栏输入,而是就在空页面输入,输入过程中没有任何反应,但是输入结束后,界面就刷新好了。
然后再打开网页检查,就能看到这个网页已经是http2了。
问题
问题1
Q:如何设置端口
A: hypercorn myapp:app --bind 0.0.0.0:8080