2018-12-29 18:43:58 +04:00
You can define Header parameters the same way you define `Query` , `Path` and `Cookie` parameters.
2018-12-14 21:02:25 +04:00
## Import `Header`
First import `Header` :
```Python hl_lines="1"
2018-12-21 16:22:33 +04:00
{!./src/header_params/tutorial001.py!}
2018-12-14 21:02:25 +04:00
` ``
2018-12-29 18:43:58 +04:00
## Declare ` Header` parameters
2018-12-14 21:02:25 +04:00
Then declare the header parameters using the same structure as with ` Path`, ` Query` and ` Cookie`.
2018-12-29 18:43:58 +04:00
The first value is the default value, you can pass all the extra validation or annotation parameters:
2018-12-14 21:02:25 +04:00
` ``Python hl_lines="7"
2018-12-21 16:22:33 +04:00
{!./src/header_params/tutorial001.py!}
2018-12-14 21:02:25 +04:00
` ``
2019-05-15 22:01:23 +04:00
!!! note "Technical Details"
2018-12-14 21:02:25 +04:00
` Header` is a "sister" class of ` Path`, ` Query` and ` Cookie`. It also inherits from the same common ` Param` class.
2020-01-18 16:21:54 +01:00
But remember that when you import ` Query`, ` Path`, ` Header`, and others from ` fastapi`, those are actually functions that return special classes.
2019-05-15 22:01:23 +04:00
2018-12-14 21:02:25 +04:00
!!! info
2018-12-29 18:43:58 +04:00
To declare headers, you need to use ` Header`, because otherwise the parameters would be interpreted as query parameters.
2018-12-14 21:02:25 +04:00
## Automatic conversion
` Header` has a little extra functionality on top of what ` Path`, ` Query` and ` Cookie` provide.
Most of the standard headers are separated by a "hyphen" character, also known as the "minus symbol" (` -`).
But a variable like ` user-agent` is invalid in Python.
So, by default, ` Header` will convert the parameter names characters from underscore (` _`) to hyphen (` -`) to extract and document the headers.
Also, HTTP headers are case-insensitive, so, you can declare them with standard Python style (also known as "snake_case").
So, you can use ` user_agent` as you normally would in Python code, instead of needing to capitalize the first letters as ` User_Agent` or something similar.
If for some reason you need to disable automatic conversion of underscores to hyphens, set the parameter ` convert_underscores` of ` Header` to ` False`:
` ``Python hl_lines="7"
2018-12-21 16:22:33 +04:00
{!./src/header_params/tutorial002.py!}
2018-12-14 21:02:25 +04:00
` ``
!!! warning
Before setting ` convert_underscores` to ` False`, bear in mind that some HTTP proxies and servers disallow the usage of headers with underscores.
2019-03-22 21:47:54 +04:00
## Duplicate headers
It is possible to receive duplicate headers. That means, the same header with multiple values.
You can define those cases using a list in the type declaration.
You will receive all the values from the duplicate header as a Python ` list`.
For example, to declare a header of ` X-Token` that can appear more than once, you can write:
` ``Python hl_lines="9"
{!./src/header_params/tutorial003.py!}
` ``
If you communicate with that *path operation* sending two HTTP headers like:
` ``
X-Token: foo
X-Token: bar
` ``
The response would be like:
` ``JSON
{
"X-Token values": [
"bar",
"foo"
]
}
` ``
2018-12-14 21:02:25 +04:00
## Recap
2018-12-29 18:43:58 +04:00
Declare headers with ` Header`, using the same common pattern as ` Query`, ` Path` and ` Cookie`.
2018-12-14 21:02:25 +04:00
And don't worry about underscores in your variables, **FastAPI ** will take care of converting them.