413 请求实体太大烧瓶 werkzeug Gunicorn MAX_CONTENT_LENGTH

问题描述 投票:0回答:1

我将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 gunicorn werkzeug content-length
1个回答
0
投票

问题出在 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()
© www.soinside.com 2019 - 2024. All rights reserved.