Замените имя сервера поддельным именем сервера в заголовке ответа в fastapi

Я использую uvicorn в качестве сервера для запуска приложения с использованием быстрого API. При выполнении URL-адреса конечной точки в Swagger в заголовке ответа сервера отображается следующее сообщение.

 content-length: 122 
 content-type: application/json 
 date: Sat12 Dec 2020 10:18:55 GMT 
 server: uvicorn 

Как изменить имя сервера на новое имя как server: firstproject? Следующий код объединяет имя сервера unciorn с новым именем

@app.middleware("http")
async def add_custom_header(request, call_next):
    response = await call_next(request)
    response.headers['server'] = 'firstproject'
    return response

Это дает следующий вывод

content-length: 122 
 content-type: application/json 
 date: Sat12 Dec 2020 10:19:33 GMT 
 server: uvicornfirstproject 

Как изменить имя сервера на server: firstproject в заголовке ответа?

РЕДАКТИРОВАТЬ

В start_server.py

 import uvicorn

from app.main import app

if __name__ == "__main__":
    uvicorn.run("start_server:app --header server:firstproject", host = "0.0.0.0", port=8000, reload=True)

    

выдает следующую ошибку

INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [15256] using statreload
ERROR:    Error loading ASGI app. Attribute "app --header server:firstproject" not found in module "start_server".

Я запускаю код из Visual Studio

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
2 759
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете установить собственный заголовок при запуске uvicorn.

--header TEXT Укажите настраиваемые заголовки ответов HTTP по умолчанию в виде пары «Имя: значение».

Когда вы запустите его таким образом, оно переопределит имя сервера по умолчанию.

uvicorn my_app:app --header server:firstproject

Если вы запускаете uvicorn из файла python. Вам нужно передать их как кортеж внутри списка.

if __name__ == "__main__":
    uvicorn.run("my_app:app", headers=[("server", "firstproject")])

Я отредактировал вопрос, чтобы показать ошибку после добавления, как вы предлагаете.

Himal Acharya 12.12.2020 11:43

Вы используете это неправильно, я обновил свой ответ.

Yagiz Degirmenci 12.12.2020 11:58

Это работало в локальном хосте. Когда я отправляю тот же код в Linode и запускаю, снова uvicorn отображается в имени сервера вместо поддельного имени сервера firstproject

Himal Acharya 12.12.2020 12:22

Хм, странно. Вы балансируете трафик между двумя версиями?

Yagiz Degirmenci 12.12.2020 12:30

Извините. Я тоже получил ответ в linode после добавления как передаваемого кортежа (код Python), так и uvicorn my_app:app --header server:firstproject (во время запуска). Спасибо за быстрый ответ.

Himal Acharya 12.12.2020 12:33

Если вам нужно «удалить» заголовок «сервер», вы можете использовать опцию --no-server-header

uvicorn my_app:app --no-server-header

Если вы запускаете uvicorn из файла Python:

if __name__ == '__main__':
    uvicorn.run('my_app:app', server_header=False)

Другие вопросы по теме