You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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.