flask默认请求体大小限制为16mb,由werkzeug的max_content_length配置决定;需在应用创建后、启动前设为整数,且须同步调整nginx、gunicorn等中间件限制,并采用流式处理避免内存溢出。

Flask默认请求体大小限制是多少
Flask本身不直接限制请求体大小,真正起作用的是其底层WSGI服务器(如Werkzeug内置开发服务器)的MAX_CONTENT_LENGTH配置,默认值为16 * 1024 * 1024(16MB)。超过这个值,Werkzeug会直接返回413 Payload Too Large,请求根本不会进入你的视图函数。
如何修改MAX_CONTENT_LENGTH配置
必须在Flask应用实例创建后、启动前设置,且需早于任何路由注册。常见错误是把它放在@app.route之后,或误设为字符串而非整数。
- 正确写法:
app = Flask(__name__)<br><code>app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024 # 100MB</code>
- 若用环境变量控制,确保转换为
int:app.config['MAX_CONTENT_LENGTH'] = int(os.getenv('MAX_CONTENT_LENGTH', '50000000')) - 注意:该配置只影响
request.get_data()、request.form、request.files等解析行为,对request.stream原始流无影响
生产环境Nginx或Gunicorn还会拦截大请求
即使Flask允许100MB,Nginx默认client_max_body_size是1MB,Gunicorn默认--limit-request-body是1024*1024(1MB)。这些中间件会在请求到达Flask前就拒绝掉。
inference.sh 的 Python SDK:运行 AI 应用、构建智能体,并集成 150 多个模型。包名:inferencesh (pip install inferencesh)。支持同步/异步……
- Nginx配置需显式加大:
client_max_body_size 100M;(放在http、server或location块中) - Gunicorn启动时加参数:
gunicorn --limit-request-body 104857600 app:app(单位字节) - Cloudflare等CDN也可能有自身限制,需单独检查其“Maximum Upload Size”设置
大文件上传应避免全量加载到内存
单纯调高MAX_CONTENT_LENGTH只是让大请求能进来,但request.files['file'].read()或request.get_data()仍会把整个内容读入内存,极易OOM。真实场景应流式处理。
- 用
request.stream配合分块读取:while True:<br><code> chunk = request.stream.read(8192)</code><br><code> if not chunk:</code><br><code> break</code><br><code> # 写入磁盘或转发</code>
- 上传文件时优先用
request.files并调用.save(),它内部已做流式写入,不占额外内存 - 如果前端支持,考虑分片上传(如使用
axios配合Content-Range),服务端只校验+拼接,彻底避开单次大请求
Flask层的MAX_CONTENT_LENGTH只是第一道门,背后还有Web服务器、反向代理、甚至云服务商的多重限制;而能否扛住大请求,关键不在“放行”,而在“不把数据全塞进内存”。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










