You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python WSGI应用在Gunicorn中Keep-Alive Header未正常生效

解决Gunicorn响应头始终返回Connection: Close的问题

可能的原因及解决步骤:

1. 检查请求的HTTP版本与请求头

Gunicorn会根据请求的协议版本和请求头自动决定是否启用长连接:

  • 如果请求使用HTTP/1.0,默认会返回Connection: Close,除非请求头显式包含Connection: keep-alive。
  • 如果是HTTP/1.1及以上版本,默认支持长连接,但需要确保请求头里的Connection字段为keep-alive(大部分现代客户端默认会发送)。

可以用curl测试请求细节:

curl -v http://localhost:8000

查看输出中请求头的Connection字段,以及响应头的对应内容。

2. 不要手动设置Connection响应头

Gunicorn会根据自身配置和请求情况自动管理Connection头,手动设置的Connection: keep-alive可能被Gunicorn覆盖。删除代码中手动添加的('Connection', 'keep-alive'),让Gunicorn自动处理。

修改后的代码:

def app(environ, start_response):
    """Simplest possible application object"""
    data = b'Hello, World!\n'
    status = '200 OK'
    response_headers = [
        ('Content-type', 'text/plain'),
        ('Content-Length', str(len(data)))
    ]
    start_response(status, response_headers)
    return iter([data])

3. 确保Gunicorn的keep-alive配置生效

启动时指定--keep-alive参数设置长连接超时时间(单位:秒),比如:

gunicorn main:app --keep-alive 10

该参数控制长连接在空闲多久后关闭,确保值大于0。

4. 检查Gunicorn版本

旧版本的Gunicorn可能存在长连接处理的bug,建议升级到最新稳定版:

pip install --upgrade gunicorn

5. 确认worker类型(如果使用异步worker)

如果使用gevent或eventlet等异步worker,需要确保正确安装并指定:

# 安装gevent
pip install gevent
# 启动时指定worker类型
gunicorn main:app --worker-class gevent --keep-alive 10

异步worker对长连接的支持更友好,但sync worker也能正常处理长连接。

内容的提问来源于stack exchange,提问作者Miloš Popović - Syose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:42:16