Класс GZipMiddleware
Класс GZipMiddleware применяется к приложению
FastAPI и автоматически сжимает тело ответа
алгоритмом GZip. Сжатие выполняется только в том случае,
если клиент прислал заголовок Accept-Encoding
со значением gzip. Первым параметром
передаётся приложение, вторым - минимальный размер
ответа minimum_size в байтах, при котором
включается сжатие. Третьим параметром передаётся
compresslevel - уровень сжатия от 1 до 9.
Сжатие уменьшает объём передаваемых данных,
но увеличивает нагрузку на процессор. Поэтому мелкие
ответы сжимать невыгодно, и параметр
minimum_size отсекает их.
Синтаксис
from fastapi import FastAPI
from fastapi.middleware.gzip import GZipMiddleware
app = FastAPI()
app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=9)
Пример
Давайте подключим сжатие с минимальным размером ответа в 1000 байт:
from fastapi import FastAPI
from fastapi.middleware.gzip import GZipMiddleware
app = FastAPI()
app.add_middleware(GZipMiddleware, minimum_size=1000)
@app.get('/')
def index():
return {'text': 'abcde' * 500}
Если клиент пришлёт заголовок
Accept-Encoding: gzip, то ответ будет сжат,
а в заголовках появится Content-Encoding: gzip.
Результат выполнения кода в виде заголовков ответа:
{"content-encoding": "gzip", "vary": "Accept-Encoding"}
Пример
Давайте зададим уровень сжатия compresslevel
равным 5 и минимальный размер 500 байт:
from fastapi import FastAPI
from fastapi.middleware.gzip import GZipMiddleware
app = FastAPI()
app.add_middleware(
GZipMiddleware,
minimum_size=500,
compresslevel=5
)
@app.get('/article')
def article():
return {'text': 'article ' * 100}
Чем выше уровень сжатия, тем сильнее сжимается ответ, но тем больше времени тратит процессор. Значение 9 даёт максимальное сжатие, значение 1 - самое быстрое.
Смотрите также
-
класс
CORSMiddleware,
который настраивает кросс-доменные запросы -
класс
TrustedHostMiddleware,
который ограничивает список доверенных хостов -
класс
HTTPSRedirectMiddleware,
который перенаправляет запросы на HTTPS -
параметр
max_age,
который задаёт время кеширования CORS-ответов