Vercel拦截小于4.5MB的请求,为何实际有效负载上限仅约150KB?
问题:Vercel部署的Express接口触发413负载过大错误(远低于官方4.5MB限制)
Vercel官方说明:Serverless Function的请求体或响应体的最大有效负载大小为4.5MB。若Serverless Function收到超过该限制的有效负载,将返回错误413: FUNCTION_PAYLOAD_TOO_LARGE。
- 在Vercel部署Express.js接口,发送约900KB的Base64文本请求体时触发413错误
- 实际测试发现仅能正常发送约150KB的负载,远低于官方给出的4.5MB上限
可能的原因及解决办法
1. Express Body Parser默认限制(最常见原因)
Express框架自带的express.json()中间件默认有100KB的请求体大小限制,这个限制会优先于Vercel的Serverless Function限制生效,导致你发送超过100KB的请求就被拦截。
解决方法:配置express.json()时手动指定更大的限制值(建议设为比4.5MB略大的数值):
// 配置JSON请求体的大小限制 app.use(express.json({ limit: '5mb' })); // 如果同时使用urlencoded格式,也要同步配置 app.use(express.urlencoded({ extended: true, limit: '5mb' }));
2. Base64编码的体积计算误区
Base64编码会让原始二进制数据体积膨胀约33%(每3字节原始数据转成4字节Base64字符),但900KB的Base64对应的原始数据约为677KB,远低于4.5MB上限,所以这个不是触发413的主因,但需要确认你是否误将原始数据大小当成了请求体总大小。
3. 额外的请求内容开销
如果你的请求体是包含Base64字符串的JSON对象(比如{"content": "base64文本"}),请求体总大小会包含JSON结构的字符开销,但这点增量不足以触发413,还是优先检查Body Parser的配置。
4. Vercel边缘层临时限制(少见)
若以上配置都正确仍出现问题,可尝试重新部署项目,或检查Vercel控制台是否有临时的服务限制提示。
内容的提问来源于stack exchange,提问作者Shiawase
相关产品推荐
相关产品推荐

