Fortgeschrittene Middleware¶
Im Haupttutorial haben Sie gelesen, wie Sie Ihrer Anwendung benutzerdefinierte Middleware hinzufĂŒgen können.
Und dann auch, wie man CORS mittels der CORSMiddleware handhabt.
In diesem Abschnitt werden wir sehen, wie man andere Middlewares verwendet.
ASGI-Middleware hinzufĂŒgen¶
Da FastAPI auf Starlette basiert und die ASGI-Spezifikation implementiert, können Sie jede ASGI-Middleware verwenden.
Eine Middleware muss nicht speziell fĂŒr FastAPI oder Starlette gemacht sein, um zu funktionieren, solange sie der ASGI-Spezifikation genĂŒgt.
Im Allgemeinen handelt es sich bei ASGI-Middleware um Klassen, die als erstes Argument eine ASGI-Anwendung erwarten.
In der Dokumentation fĂŒr ASGI-Middlewares von Drittanbietern wird Ihnen wahrscheinlich gesagt, dass Sie etwa Folgendes tun sollen:
from unicorn import UnicornMiddleware
app = SomeASGIApp()
new_app = UnicornMiddleware(app, some_config="rainbow")
Aber FastAPI (eigentlich Starlette) bietet eine einfachere Möglichkeit, welche sicherstellt, dass die internen Middlewares zur Behandlung von Serverfehlern und benutzerdefinierten Exceptionhandlern ordnungsgemÀà funktionieren.
Dazu verwenden Sie app.add_middleware() (wie schon im Beispiel fĂŒr CORS gesehen).
from fastapi import FastAPI
from unicorn import UnicornMiddleware
app = FastAPI()
app.add_middleware(UnicornMiddleware, some_config="rainbow")
app.add_middleware() empfĂ€ngt eine Middleware-Klasse als erstes Argument und dann alle weiteren Argumente, die an die Middleware ĂŒbergeben werden sollen.
Integrierte Middleware¶
FastAPI enthĂ€lt mehrere Middlewares fĂŒr gĂ€ngige AnwendungsfĂ€lle. Wir werden als NĂ€chstes sehen, wie man sie verwendet.
Technische Details
FĂŒr die nĂ€chsten Beispiele könnten Sie auch from starlette.middleware.something import SomethingMiddleware verwenden.
FastAPI bietet mehrere Middlewares via fastapi.middleware an, als Annehmlichkeit fĂŒr Sie, den Entwickler. Die meisten verfĂŒgbaren Middlewares kommen aber direkt von Starlette.
HTTPSRedirectMiddleware¶
Erzwingt, dass alle eingehenden Requests entweder https oder wss sein mĂŒssen.
Alle eingehenden Requests an http oder ws werden stattdessen an das sichere Schema umgeleitet.
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¶
Erzwingt, dass alle eingehenden Requests einen korrekt gesetzten Host-Header haben, um sich vor HTTP-Host-Header-Angriffen zu schĂŒtzen.
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"}
Die folgenden Argumente werden unterstĂŒtzt:
allowed_hostsâ Eine Liste von Domain-Namen, die als Hostnamen zulĂ€ssig sein sollten. Wildcard-Domains wie*.example.comwerden unterstĂŒtzt, um Subdomains zu matchen. Um jeden Hostnamen zu erlauben, verwenden Sie entwederallowed_hosts=["*"]oder lassen Sie diese Middleware weg.www_redirectâ Wenn auf True gesetzt, werden Requests an Nicht-www-Versionen der erlaubten Hosts zu deren www-GegenstĂŒcken umgeleitet. Der Defaultwert istTrue.
Wenn ein eingehender Request nicht korrekt validiert wird, wird eine 400-Response gesendet.
GZipMiddleware¶
Verarbeitet GZip-Responses fĂŒr alle Requests, die "gzip" im Accept-Encoding-Header enthalten.
Diese Middleware verarbeitet sowohl Standard- als auch Streaming-Responses.
from fastapi import FastAPI
from fastapi.middleware.gzip import GZipMiddleware
app = FastAPI()
app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=5)
@app.get("/")
async def main():
return "somebigcontent"
Die folgenden Argumente werden unterstĂŒtzt:
minimum_sizeâ Responses, die kleiner als diese MindestgröĂe in Bytes sind, nicht per GZip komprimieren. Der Defaultwert ist500.compresslevelâ Wird wĂ€hrend der GZip-Kompression verwendet. Es ist ein Ganzzahlwert zwischen 1 und 9. Der Defaultwert ist9. Ein niedrigerer Wert resultiert in schnellerer Kompression, aber gröĂeren DateigröĂen, wĂ€hrend ein höherer Wert langsamere Kompression, aber kleinere DateigröĂen zur Folge hat.
Andere Middlewares¶
Es gibt viele andere ASGI-Middlewares.
Zum Beispiel:
Um mehr ĂŒber weitere verfĂŒgbare Middlewares herauszufinden, besuchen Sie Starlettes Middleware-Dokumentation und die ASGI Awesome List.