Flask+Werkzeug+Gunicorn环境下413请求实体过大问题求助
解决Flask+Gunicorn提交大表单返回413的问题
1. 补充Gunicorn的请求体大小限制参数
你当前的Gunicorn命令仅设置了请求行和请求字段大小的限制,但Gunicorn默认请求体大小限制为1MB,即便表单实际大小是800KB,加上表单编码的额外开销可能刚好触碰到阈值。需要添加--limit-request-body参数,设置和Flask一致的5MB限制:
gunicorn --log-level debug --timeout 300 --limit-request-line 0 --limit-request-field_size 0 --limit-request-body 5242880 --workers 1 -b 0.0.0.0:80 app:app
(5242880 是 510241024 的字节数)
2. 调整Werkzeug的表单字段数量限制
Flask依赖的Werkzeug默认限制表单字段总数为1000个,你的2000行表格大概率会超过这个数量(每行至少对应1个字段)。在app.py中添加以下配置:
app.config['MAX_FORM_KEYS'] = 10000 # 可根据实际字段数调整更大的值
3. 修改表单提交编码类型
如果当前表单用的是application/x-www-form-urlencoded编码,大量字段会让请求体结构冗余,可能触发隐性限制。在前端form标签中添加enctype="multipart/form-data":
<form method="POST" enctype="multipart/form-data"> <!-- 表单内容 --> </form>
4. 检查反向代理的限制(如果有)
如果Gunicorn前端部署了Nginx等反向代理,需要确认代理服务器的请求体大小限制。比如Nginx需要修改nginx.conf或站点配置文件,设置:
client_max_body_size 5M;
修改后重启Nginx服务。
内容的提问来源于stack exchange,提问作者Nima Mazloumi
相关产品推荐
相关产品推荐

