3.7 KiB
HTTP-заголовки ответа
Использование параметра Response
Вы можете объявить параметр типа Response
в вашей функции-обработчике пути (так же, как вы делаете для cookie).
Затем вы можете установить HTTP-заголовки в этом временном объекте ответа.
{* ../../docs_src/response_headers/tutorial002.py hl[1, 7:8] *}
После этого вы можете вернуть любой объект, который вам нужен, как обычно (например, dict
, модель базы данных и т.д.).
Если вы объявили response_model
, он все равно будет использован для фильтрации и преобразования объекта, который вы вернули.
FastAPI использует этот временный ответ для извлечения HTTP-заголовков (также cookie и статус-код ответа) и помещает их в окончательный ответ, который содержит значение, которое вы вернули и которое фильтруется любым response_model
.
Вы также можете объявить параметр Response
в зависимостях и установить HTTP-заголовки (и cookie) в них.
Непосредственный возврат Response
Вы также можете добавить HTTP-заголовки при непосредственном возврате объекта типа Response
.
Создайте ответ, как описано в разделе Непосредственный возврат ответа{.internal-link target=_blank}, и передайте HTTP-заголовки в качестве дополнительного параметра:
{* ../../docs_src/response_headers/tutorial001.py hl[10:12] *}
/// note | Технические детали
Вы также могли бы использовать from starlette.responses import Response
или from starlette.responses import JSONResponse
.
FastAPI предоставляет те же starlette.responses
, что и fastapi.responses
, для удобства разработчика. Но большинство доступных ответов поступает непосредственно из Starlette.
И так как Response
может часто использоваться для установки HTTP-заголовков и cookie, FastAPI также предоставляет его в fastapi.Response
.
///
Пользовательские заголовки
Имейте в виду, что можно добавлять проприетарные пользовательские HTTP-заголовки с использованием префикса 'X-'.
Но если у вас есть пользовательские заголовки, которые вы хотите, чтобы клиент в браузере мог видеть, вам нужно добавить их в ваши CORS-настройки (прочтите больше в разделе CORS (Cross-Origin Resource Sharing){.internal-link target=_blank}), используя параметр expose_headers
, документированный в документации Starlette по CORS.