Skip to content

Latest commit

 

History

History
99 lines (57 loc) · 4.44 KB

middleware.md

File metadata and controls

99 lines (57 loc) · 4.44 KB

Fortgeschrittene Middleware

Im Haupttutorial haben Sie gelesen, wie Sie Ihrer Anwendung benutzerdefinierte Middleware{.internal-link target=_blank} hinzufügen können.

Und dann auch, wie man CORS mittels der CORSMiddleware{.internal-link target=_blank} 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, etwa Folgendes zu tun:

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.

!!! note "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.

{!../../../docs_src/advanced_middleware/tutorial001.py!}

TrustedHostMiddleware

Erzwingt, dass alle eingehenden Requests einen korrekt gesetzten Host-Header haben, um sich vor HTTP-Host-Header-Angriffen zu schützen.

{!../../../docs_src/advanced_middleware/tutorial002.py!}

Die folgenden Argumente werden unterstützt:

  • allowed_hosts – Eine Liste von Domain-Namen, die als Hostnamen zulässig sein sollten. Wildcard-Domains wie *.example.com werden unterstützt, um Subdomains zu matchen. Um jeden Hostnamen zu erlauben, verwenden Sie entweder allowed_hosts=["*"] oder lassen Sie diese Middleware weg.

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.

{!../../../docs_src/advanced_middleware/tutorial003.py!}

Die folgenden Argumente werden unterstützt:

  • minimum_size – Antworten, die kleiner als diese Mindestgröße in Bytes sind, nicht per GZip komprimieren. Der Defaultwert ist 500.

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.