Flask返回超64KB响应被截断 如何调整JSON响应大小上限?
Flask响应超过64KB被截断的解决方法
Flask本身没有内置64KB的响应大小限制,出现截断基本是部署链路的缓冲、传输配置问题,按以下场景排查调整即可:
- 前置反向代理导致的截断(最常见)
64KB刚好是Nginx等反向代理的默认代理缓冲总阈值(默认配置为8个8KB的缓冲块,总大小64KB),缓冲写满时就会截断未返回完的响应。Flask侧不需要修改框架全局配置,只需要给对应接口的响应加禁止代理缓冲的头即可,修改后的代码参考:from flask import after_this_request @app.route('/getfoldercontent') def getfoldercontent(): content = get_folder_content_metadata(request.args.get('arg1'), request.args.get('arg2')) if content is None: res = "Not found" rsp_code = 404 else: res = jsonify(content) rsp_code = 200 @after_this_request def set_no_proxy_buffering(response): # 通知Nginx类反向代理不要缓冲当前响应,直接透传 response.headers['X-Accel-Buffering'] = 'no' # 兼容其他代理、CDN节点的缓冲控制 response.headers['Cache-Control'] = 'no-cache' return response return res, rsp_code - 直接用Flask开发服务器运行时出现截断
先检查是否启用了flask-compress这类响应压缩扩展,这类扩展会对超过体积阈值的响应做Gzip压缩,部分旧版本存在压缩逻辑bug会导致内容截断,升级对应扩展版本,或者临时关闭压缩即可定位问题。 - WSGI容器配置问题
如果是用Gunicorn、uWSGI这类容器部署,检查容器的响应缓冲参数:比如Gunicorn的--buffer-size参数默认值为4096字节,部分定制版本可能将阈值设为64KB,启动时调大该参数即可,例如执行gunicorn --buffer-size=655360 main:app将缓冲上限调整为640KB。
注意:不要修改
MAX_CONTENT_LENGTH配置,这个参数是用来限制客户端上传的请求体大小的,对服务端返回的响应体积没有任何约束,改了也解决不了截断问题。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

