You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Uvicorn+Quart接收POST请求时出现413请求实体过大错误排查

解决Quart+Uvicorn接收大JSON请求返回413错误的问题

你的问题出在配置参数找错了:你设置的ws_max_size和h11_max_incomplete_event_size和HTTP POST请求体大小限制无关,真正需要调整的是Quart的内容长度限制和Uvicorn的请求体大小限制。

问题根源

  • ws_max_size:仅针对WebSocket连接的消息大小,不影响普通HTTP请求。
  • h11_max_incomplete_event_size:是h11库处理HTTP协议时的不完整事件缓冲区大小,并非请求体的总大小限制。
  • Quart默认有MAX_CONTENT_LENGTH配置(默认值16MB),超过这个值会直接返回413。
  • Uvicorn默认的max_request_size参数(默认值1MB)也会限制请求体大小,超过同样返回413。

修复方案

同时调整Quart的MAX_CONTENT_LENGTH和Uvicorn的max_request_size参数,匹配你需要支持的最大请求体大小:

from quart import Quart, request
import uvicorn

app = Quart(__name__)
# 设置Quart允许的最大请求体大小,这里设为4GB(2^32字节)
app.config['MAX_CONTENT_LENGTH'] = 2**32

@app.route('/', methods=['POST'])
async def hello():
    json_data = await request.json
    return ('', 204)

# 配置Uvicorn时添加max_request_size参数,值和Quart保持一致
config = uvicorn.Config(
    app,
    host="127.0.0.1",
    port=8000,
    max_request_size=2**32,  # 关键:设置HTTP请求体最大大小
    ws_max_size=2**64,
    h11_max_incomplete_event_size=2**64,
)
server = uvicorn.Server(config)
server.run()

注意事项

  • 测试代码中发送2**32个字符的字符串(约4GB)会占用大量内存,可能导致本地机器内存不足,建议先使用较小的大字符串测试(比如2**24,约16MB)验证功能正常。
  • 如果需要支持更大的请求体,可以进一步调整这两个参数的值,但要考虑服务器的内存和带宽承载能力。

内容的提问来源于stack exchange,提问作者Sam Coutteau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:50:17