作者:麥克煎蛋 出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!
除了自定義中間件,我們也可以直接使用其他的中間件。
FastAPI通過 app.add_middleware()
操作來引入已定義的中間件。
from fastapi import FastAPI from unicorn import UnicornMiddleware app = FastAPI() app.add_middleware(UnicornMiddleware, some_config="rainbow")
app.add_middleware()
第一個參數是中間件類,同時還支持中間件的其他附加信息。
FastAPI提供了一些常用的中間件。
一、HTTPSRedirectMiddleware
HTTPSRedirectMiddleware強制發來的請求協議必須是https或者wss。
from fastapi import FastAPI from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware app = FastAPI() app.add_middleware(HTTPSRedirectMiddleware) @app.get("/") async def main(): return {"message": "Hello World"}
二、TrustedHostMiddleware
TrustedHostMiddleware
強制發來的請求必須在Header信息中
設置了Host選項,為了避免HTTP Host Header攻擊。
from fastapi import FastAPI from fastapi.middleware.trustedhost import TrustedHostMiddleware app = FastAPI() app.add_middleware( TrustedHostMiddleware, allowed_hosts=["example.com", "*.example.com"] ) @app.get("/") async def main(): return {"message": "Hello World"}
三、GZipMiddleware
當請求的頭信息 Accept-Encoding
字段帶有"gzip"時,GZipMiddleware負責
完成相應的返回結果處理。
GZipMiddleware
支持 minimum_size
參數:當返回結果大小小於指定值時不啟用壓縮。(單位為字節,默認值為500)
from fastapi import FastAPI from fastapi.middleware.gzip import GZipMiddleware app = FastAPI() app.add_middleware(GZipMiddleware, minimum_size=1000) @app.get("/") async def main(): return "somebigcontent"
更多中間件信息可參考文檔: