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

如何配置Flask服务器,避免响应客户端时携带FIN位以保持连接

Flask 保持TCP连接开启的解决方案

当然可以通过调整服务器配置实现,问题核心是当前服务器返回响应后主动触发了TCP连接关闭(发送FIN位),这通常和HTTP连接模式的配置有关。下面是具体解决方法:

1. 问题根源

Flask默认使用Werkzeug开发服务器,HTTP/1.1虽默认支持持久连接(Keep-Alive),但如果服务器或请求头指定了Connection: close,就会在响应后关闭TCP连接,对应数据包中的FIN位。

2. 配置Werkzeug开发服务器

方式一:全局添加Keep-Alive响应头

通过响应钩子统一设置持久连接相关HTTP头,强制服务器保持连接:

from flask import Flask

app = Flask(__name__)

# 全局给所有响应添加Keep-Alive头
@app.after_request
def set_keep_alive_headers(response):
    response.headers["Connection"] = "keep-alive"
    # 配置连接超时和最大复用请求数,可按需调整
    response.headers["Keep-Alive"] = "timeout=60, max=100"
    return response

@app.route("/")
def index():
    return "Hello, World!"

if __name__ == "__main__":
    # 开启多线程支持并发连接,同时设置keepalive超时
    app.run(threaded=True, keepalive=60)

方式二:直接配置Werkzeug底层参数

如果用Werkzeug的run_simple启动服务器,可显式配置keep-alive:

from werkzeug.serving import run_simple
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, World!"

if __name__ == "__main__":
    # 配置keepalive超时,threaded=True支持并发连接
    run_simple("0.0.0.0", 5000, app, threaded=True, keepalive=60)

3. 生产环境服务器配置

如果用Gunicorn、uWSGI等生产级服务器,需对应调整参数:

  • Gunicorn:启动时添加--keep-alive 60参数
  • uWSGI:配置文件中设置http-keepalive=60

4. 验证效果

用Wireshark抓包或curl -v命令查看响应头,确认Connection: keep-alive存在,且TCP连接在响应后不会立即发送FIN包,后续请求可复用该连接。

内容的提问来源于stack exchange,提问作者Elliott Goldstein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:55:44