Волга
Главная
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

Пользовательская обработка методов HEAD, OPTIONS и TRACE

В данном руководстве представлены различные способы обработки таких методов HTTP как HEAD, OPTIONS и TRACE.

Метод HEAD

По умолчанию, когда вы сопоставляете обработчик с методом GET, Вола также сопоставляет его с методом HEAD. Метод HEAD возвращает заголовки без тела.

Чтобы настроить поведение метода HEAD, явно определите его с помощью метода map_head:

use volga::{App, ok};

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

    // HEAD /resource
    app.map_head("/resource", || async {
        ok!([
            ("x-custom-header", "some-value-get")
        ])
    });

    // GET /resource
    app.map_get("/resource", || async {
        ok!("Hello World!", [
            ("x-custom-header", "some-value-get")
        ])
    });

    app.run().await
}

Здесь метод HEAD возвращает заголовки без тела, часто зеркально отражая те заголовки, которые вернул бы запрос GET.

Метод OPTIONS

Для специальной обработки запросов OPTIONS используйте метод map_options для сопоставления этого метода HTTP:

use volga::{App, ok};

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

    // OPTIONS /resource
    app.map_options("/resource", || async {
        ok!([
            ("Allow", "GET, OPTIONS")
        ])
    });

    // GET /resource
    app.map_get("/resource", || async {
        ok!("Hello World!")
    });

    app.run().await
}

Пример выше включает заголовок Allow для указания поддерживаемых HTTP-методов для ресурса. Тело ответа необязательно и зависит от конкретных потребностей вашего API.

Метод TRACE

Метод TRACE полезен для отладки, так как он позволяет отслеживать путь запроса к серверу и возвращает сообщение запроса для диагностических целей:

use volga::{App, HttpRequest, stream};

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

    // TRACE /
    app.map_trace("/", |req: HttpRequest| async move {
        let boxed_body = req.into_boxed_body();
        stream!(boxed_body, [
            ("content-type", "message/http")
        ])
    });

    app.run().await
}

Этот обработчик захватывает входящий запрос и отправляет его обратно в ответе с соответствующим типом содержимого.

Вы можете посмотреть примеры здесь:

  • HEAD
  • OPTIONS
  • TRACE
Last Updated:
Prev
Отмена запросов