# Параметри заголовків { #header-parameters }

Ви можете визначати параметри заголовків так само, як визначаєте параметри `Query`, `Path` і `Cookie`.

## Імпорт `Header` { #import-header }

Спочатку імпортуйте `Header`:

{* ../../docs_src/header_params/tutorial001_an_py310.py hl[3] *}

## Оголошення параметрів `Header` { #declare-header-parameters }

Потім оголосіть параметри заголовків, використовуючи ту ж структуру, що й для `Path`, `Query` та `Cookie`.

Ви можете визначити значення за замовчуванням, а також усі додаткові параметри валідації або анотації:

{* ../../docs_src/header_params/tutorial001_an_py310.py hl[9] *}

/// note | Технічні деталі

`Header` є «сестринським» класом для `Path`, `Query` і `Cookie`. Він також успадковується від того ж спільного класу `Param`.

Але пам’ятайте, що коли ви імпортуєте `Query`, `Path`, `Header` та інші з `fastapi`, то насправді це функції, які повертають спеціальні класи.

///

/// info | Інформація

Щоб оголосити заголовки, потрібно використовувати `Header`, інакше параметри будуть інтерпретуватися як параметри запиту.

///

## Автоматичне перетворення { #automatic-conversion }

`Header` має трохи додаткової функціональності порівняно з тим, що надають `Path`, `Query` та `Cookie`.

Більшість стандартних заголовків розділяються символом «дефіс», також відомим як «символ мінуса» (`-`).

Але змінна, така як `user-agent`, є недійсною в Python.

Тому, за замовчуванням, `Header` перетворюватиме символи підкреслення (`_`) у назвах параметрів на дефіси (`-`), щоб отримувати та документувати заголовки.

Також заголовки HTTP не чутливі до регістру, тож ви можете оголошувати їх у стандартному стилі Python (також відомому як «snake_case»).

Тому ви можете використовувати `user_agent`, як зазвичай у коді Python, замість того щоб потрібно було писати з великої літери перші літери, як `User_Agent` або щось подібне.

Якщо з якоїсь причини вам потрібно вимкнути автоматичне перетворення підкреслень на дефіси, встановіть параметр `convert_underscores` у `Header` в `False`:

{* ../../docs_src/header_params/tutorial002_an_py310.py hl[10] *}

/// warning | Попередження

Перед тим як встановити `convert_underscores` в `False`, пам’ятайте, що деякі HTTP-проксі та сервери забороняють використання заголовків із підкресленнями.

///

## Дубльовані заголовки { #duplicate-headers }

Можливо отримати дубльовані заголовки. Тобто один і той самий заголовок із кількома значеннями.

Ви можете визначити такі випадки, використовуючи список у типізації.

Ви отримаєте всі значення дубльованого заголовка у вигляді Python-`list`.

Наприклад, щоб оголосити заголовок `X-Token`, який може з’являтися більше ніж один раз, ви можете написати:

{* ../../docs_src/header_params/tutorial003_an_py310.py hl[9] *}

Якщо ви взаємодієте з цією *операцією шляху*, надсилаючи два HTTP-заголовки, наприклад:

```
X-Token: foo
X-Token: bar
```

Відповідь буде така:

```JSON
{
    "X-Token values": [
        "bar",
        "foo"
    ]
}
```

## Підсумок { #recap }

Оголошуйте заголовки за допомогою `Header`, використовуючи той самий загальний підхід, що й для `Query`, `Path` та `Cookie`.

І не хвилюйтеся про підкреслення у ваших змінних — **FastAPI** подбає про їх перетворення.
