【问题标题】:Replace server name with fake server name in response header in fastapi在 fastapi 的响应标头中将服务器名称替换为假服务器名称
【发布时间】:2020-12-12 10:17:58
【问题描述】:

我使用 uvicorn 作为服务器来使用快速 api 运行应用程序。在 Swagger 中执行端点 url 时,服务器响应的响应头中显示以下消息。

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

如何将服务器名称更改为新名称作为服务器: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 

如何将服务器名称更改为服务器:响应标头中的第一个项目?

编辑

在 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 运行代码

【问题讨论】:

    标签: python-3.x fastapi


    【解决方案1】:

    你可以在运行uvicorn的时候设置一个自定义的header。

    --header TEXT将自定义默认 HTTP 响应标头指定为名称:值对

    当你这样运行它时,它会覆盖默认的服务器名称。

    uvicorn my_app:app --header server:firstproject
    

    如果您从 python 文件运行 uvicorn。您需要在列表中将它们作为元组传递。

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

    【讨论】:

    • 按照您的建议添加后,我已编辑问题以显示错误。
    • 你跑错了,我更新了答案。
    • 它在本地主机中工作。当我将相同的代码推送到 Linode 并运行时,uvicorn 再次显示在服务器名称中,而不是假服务器名称 firstproject
    • 嗯,这很奇怪。您是否对两个修订版之间的流量进行负载平衡?
    • 抱歉。在添加了传递元组(python 代码)和 uvicorn my_app:app --header server:firstproject(运行期间)后,我在 linode 中也得到了响应,谢谢您的快速响应
    【解决方案2】:

    如果您需要“删除”“服务器”标头,可以使用选项--no-server-header

    uvicorn my_app:app --no-server-header
    

    如果您从 python 文件运行 uvicorn:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 2018-08-09
      • 2019-05-04
      • 1970-01-01
      相关资源
      最近更新 更多