Волга
Главная
API Docs
GitHub
  • English
  • Русский
Главная
API Docs
GitHub
  • English
  • Русский
  • Главная
  • Основы

    • Быстрый старт
    • Параметры маршрута
    • Параметры запроса
    • Группировка маршрутов
    • Заголовки (Headers)
  • Форматы данных

    • Работа с JSON
    • Работа с Form Data
    • Работа с файлами
    • Server-Sent Events (SSE)
  • Протоколы

    • HTTP/1 and HTTP/2
    • HTTPS
    • WebSockets & WebTransport
  • Продвинутые сценарии

    • Пользовательские Middleware
    • Сжатие ответов
    • Распаковка запросов
    • Центральный обработчик ошибок
    • Внедрение Зависимостей
    • Логгирование и Трассировка
    • Статические файлы
    • CORS (Cross-Origin Resource Sharing)
    • Cookies
    • Отмена запросов
    • Пользовательская обработка методов HEAD, OPTIONS и TRACE

Распаковка запросов

Аналогично сжатию, Волга предоставляет функцию middleware, которая распаковывает тела HTTP-запросов на основе заголовка Content-Encoding. В настоящее время Волга поддерживает четыре алгоритма распаковки: Brotli, Gzip, Deflate и Zstandard.

Включение распаковки

Чтобы включить распаковку запросов, убедитесь, что вы включили необходимую функцию в Cargo.toml. Если вы не используете набор функций full, вы можете отдельно подключить функцию decompression-full делающую доступными все алгоритмы распаковки:

[dependencies]
volga = { version = "0.4.6", features = ["decompression-full"] }

Если вам нужны определенные алгоритмы, вы можете указать их явно:

[dependencies]
volga = { version = "0.4.6", features = ["decompression-brotli", "decompression-gzip"] }

Пример использования

Чтобы использовать распаковку в вашем приложении, используйте метод use_decompression() в вашем main.rs:

use volga::{App, ok};

#[tokio::main]
async fn main() -> std::io::Result<()> {
    let mut app = App::new();

    // Подключает middleware распаковывающий запросы
    app.use_decompression();

    app.map_get("/hello", || async {
        ok!("Hello, World!")
    });
    
    app.run().await
}

Затем вы можете проверить это с помощью команды curl, предварительно создав и упаковав файл users.json.gz, который вы можете сделать из ответа примера предыдущей темы: Сжатие ответов:

curl -v -X POST --location 'http://127.0.0.1:7878/users' \
    -H "Content-Type: application/json" \
    -H "Content-Encoding: gzip" \
    --compressed \
    --data-binary users.json.gz

Принцип работы

При получении запроса middleware распаковки проверяет HTTP-заголовок Content-Encoding, чтобы определить алгоритм сжатия, затем обертывает поток тела запроса в соответствующий поток распаковки и удаляет HTTP-заголовок Content-Encoding, указывая, что тело запроса больше не сжато. Если заголовок Content-Encoding не указан, то middleware игнорирует этот запрос и оставляет тело как есть.

Если заголовок Content-Encoding указывает на неподдерживаемый алгоритм, то middleware отвечает кодом состояния 415 Unsupported Media Type.

Полный пример можно посмотреть здесь

Last Updated:
Prev
Сжатие ответов
Next
Центральный обработчик ошибок