# ๐ง ๐ ๏ธ
๐ ๐ฐ ๐ โ โ ๐ฎ [๐ ๐ ๏ธ](../tutorial/middleware.md){.internal-link target=_blank} ๐ ๐ธ.
& โคด๏ธ ๐ โ โ ๐ต [โ โฎ๏ธ `CORSMiddleware`](../tutorial/cors.md){.internal-link target=_blank}.
๐ ๐ ๐ฅ ๐ ๐ โ โ๏ธ ๐ ๐ ๏ธ.
## โ ๐ซ ๐ ๏ธ
**FastAPI** โ๏ธ ๐ ๐ & ๐ ๏ธ ๐ซ ๐ง, ๐ ๐ช โ๏ธ ๐ ๐ซ ๐ ๏ธ.
๐ ๏ธ ๐ซ โ๏ธ โ FastAPI โ๏ธ ๐ ๐ท, ๐ โซ๏ธ โฉ ๐ซ ๐.
๐ข, ๐ซ ๐ ๏ธ ๐ ๐ โ ๐จ ๐ซ ๐ฑ ๐ฅ โ.
, ๐งพ ๐ฅ-๐ฅณ ๐ซ ๐ ๏ธ ๐ซ ๐ ๐ฒ ๐ฌ ๐ ๐ณ ๐:
```Python
from unicorn import UnicornMiddleware
app = SomeASGIApp()
new_app = UnicornMiddleware(app, some_config="rainbow")
```
โ๏ธ FastAPI (๐ค ๐) ๐ ๐
๐ โซ๏ธ ๐ โ ๐ญ ๐ ๐ ๐ ๏ธ ๐ต ๐ฝ โ & ๐ โ ๐โ๐ฆบ ๐ท โ.
๐, ๐ โ๏ธ `app.add_middleware()` (๐ผ โ).
```Python
from fastapi import FastAPI
from unicorn import UnicornMiddleware
app = FastAPI()
app.add_middleware(UnicornMiddleware, some_config="rainbow")
```
`app.add_middleware()` ๐จ ๐ ๏ธ ๐ ๐ฅ โ & ๐ ๐ โ ๐ถโโ๏ธ ๐ ๏ธ.
## ๐ ๏ธ ๐ ๏ธ
**FastAPI** ๐ ๐ ๐ ๏ธ โ โ๏ธ ๐ผ, ๐ฅ ๐ ๐ โญ โ โ๏ธ ๐ซ.
/// note | ๐ก โน
โญ ๐ผ, ๐ ๐ช โ๏ธ `from starlette.middleware.something import SomethingMiddleware`.
**FastAPI** ๐ ๐ ๐ ๏ธ `fastapi.middleware` ๐ช ๐, ๐ฉโ๐ป. โ๏ธ ๐
๐ช ๐ ๏ธ ๐ ๐ โช๏ธโก๏ธ ๐.
///
## `HTTPSRedirectMiddleware`
๐ ๏ธ ๐ ๐ ๐จ ๐จ ๐ ๐ฏโโ๏ธ `https` โ๏ธ `wss`.
๐ ๐จ ๐จ `http` โ๏ธ `ws` ๐ โ ๐ โ โฉ๏ธ.
{* ../../docs_src/advanced_middleware/tutorial001.py hl[2,6] *}
## `TrustedHostMiddleware`
๐ ๏ธ ๐ ๐ ๐จ ๐จ โ๏ธ โ โ `Host` ๐, โ ๐โโ ๐ก ๐บ๐ธ๐ ๐ฆ ๐ ๐.
{* ../../docs_src/advanced_middleware/tutorial002.py hl[2,6:8] *}
๐ โ ๐โ๐ฆบ:
* `allowed_hosts` - ๐ ๐ ๐ ๐ ๐ โ ๐. ๐ ๐ โ
`*.example.com` ๐โ๐ฆบ ๐ ๐. โ ๐ ๐ ๐ฏโโ๏ธ โ๏ธ `allowed_hosts=["*"]` โ๏ธ ๐ซ ๐ ๏ธ.
๐ฅ ๐จ ๐จ ๐จ ๐ซ โ โ โคด๏ธ `400` ๐จ ๐ ๐จ.
## `GZipMiddleware`
๐ต ๐ ๐จ ๐ ๐จ ๐ ๐ `"gzip"` `Accept-Encoding` ๐.
๐ ๏ธ ๐ ๐ต ๐ฏโโ๏ธ ๐ฉ & ๐ฅ ๐จ.
{* ../../docs_src/advanced_middleware/tutorial003.py hl[2,6] *}
๐ โ ๐โ๐ฆบ:
* `minimum_size` - ๐ซ ๐ ๐จ ๐ ๐คช ๐ ๐ ๐ฏ ๐ ๐ข. ๐ข `500`.
## ๐ ๐ ๏ธ
๐ค ๐ ๐ ๐ซ ๐ ๏ธ.
๐ผ:
* Uvicorn `ProxyHeadersMiddleware`
* ๐ธ๐ฒ
๐ ๐ ๐ช ๐ ๏ธ โ
๐ ๐ ๏ธ ๐ฉบ & ๐ซ ๐ ๐.