Flask编写API接收大文本时返回404错误该如何解决
问题根因与解决方案
这个问题的核心原因是请求路径/URL长度超过了网关、服务器或框架的默认限制,长文本传输时路径被截断,无法匹配到已定义的Flask路由所以返回404,短文本时长度在限制内就可以正常响应。
可按以下步骤排查解决:
- 优先把请求方式从GET改为POST,不要通过URL参数、路由变量传递大文本,全部放到请求体中传输。调整示例如下:
# 错误写法示例(用GET+路由变量/URL参数传文本) # @app.route('/receive/<input_text>', methods=['GET']) # def receive(input_text): # pass # 正确写法(用POST取请求体内容) from flask import Flask, request app = Flask(__name__) @app.route('/receive', methods=['POST']) def receive(): # 取纯文本请求体 input_text = request.get_data(as_text=True) # 如果是JSON格式传参则用 input_text = request.get_json().get('content') # 后续业务逻辑 return {'code': 0}
- 调整Flask最大请求体限制,避免框架拦截超大数据:
# 配置最大允许的请求体大小,示例为16MB,可按需调整 app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
- 如果你用了Nginx、Apache等反向代理,调整代理层的请求大小限制,以Nginx为例,在配置的server或location块中添加配置,修改后重载配置生效:
# 示例允许最大20MB请求体,可按需调整 client_max_body_size 20M;
- 若使用Gunicorn、uWSGI等WSGI服务器,确认没有开启路径长度限制相关的严苛配置,默认配置通常无需修改,若自定义过参数可回滚为默认值测试。
你也可以添加全局请求钩子打印请求路径,快速定位是否出现了路径截断问题:
@app.before_request def log_request(): print(f"收到请求:方法={request.method}, 路径={request.path}")
内容的提问来源于stack exchange,提问作者jalal abboud
相关产品推荐
相关产品推荐

