我将flask与werkzeug和gunicorn结合使用。
我正在使用以下命令运行 Gunicorn:
gunicorn --log-level debug --timeout 300 --limit-request-line 0 --limit-request-field_size 0 --workers 1 -b 0.0.0.0:80 app:app
在 app.py 中我有以下设置
app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024
我有一个带有表单的网页,其中有一个包含 2000 行的表格,我想提交。
请求正文的总大小为 800 KB。
服务器仍然只是在表单提交时终止连接
413 REQUEST ENTITY TOO LARGE
我尝试了不同的flask环境变量配置
FLASK_ENV=production
FLASK_DEBUG=0
或
FLASK_ENV=development
FLASK_DEBUG=1
无论我做什么配置,我总是得到相同的 413 状态。
有什么建议吗?
问题出在 Flask Request 类上。它对 max_form_parts 有硬编码的限制。我们必须对其进行子类化以增加限制。
更好的方法是避免使用大型表单字段,而是发布 JSON。我会这样做,但感谢 Justin Triplett,以下解决方法有效:
import flask
from flask import Request
class CustomRequest(Request):
def __init__(self, *args, **kwargs):
super(CustomRequest, self).__init__(*args, **kwargs)
self.max_form_parts = 2000
app = flask.Flask(__name__)
app.request_class = CustomRequest
@app.route("/")
def index_view():
greeting = "Hello, World!"
return flask.render_template("index.html", greeting=greeting)
if __name__ == "__main__":
app.run()