HTTP 413 错误(Request entity too large 请求实体太大)
HTTP 413 错误(Request entity too large 请求实体太大)“the server responded with a status of 413 (Request Entity Too Large)”。
来龙去脉
微信小程序用户反馈有上传文件【未捕获异常】的问题。实际表现为弹窗提示“服务异常”的默认错误提示信息
;(async () => {
await Promise.all([
// 自定义图片上传方法
uploadImg({ filePath: file1 }),
uploadImg({ filePath: file2 }),
uploadImg({ filePath: file3 })
])
})().catch(err => {
// 自定义错误捕获方法,若未提取到错误信息则提示“服务异常”
lizard.handleErrorAlert(err)
})
测试和开发在开发工具和手机上均未能复现该问题。
ℹ️注意:以下为猜测
部分设备不支持同时上传多个文件the request was rejected because no multipart boundary was found
第二个猜测请参考 wx.uploadFile 上传文件失败
按以上两个方案修改后,生产环境仍然有上传文件【未捕获异常】的问题
通过微信小程序实时日志的功能,实现日志汇聚并实时上报到小程序后台。
;(async () => {
await uploadImg({ filePath: file1 })
await uploadImg({ filePath: file2 })
await uploadImg({ filePath: file3 })
})().catch(err => {
// 自定义封装实时日志接口,具体参考上方引用
wxPromise.rlogm.addFilterMsg('REALNAME_UPLOAD_CONFIRM')
wxPromise.rlogm.info(err)
lizard.handleErrorAlert(err)
})
通过 REALNAME_UPLOAD_CONFIRM
搜索并发现未捕获异常 ERR_INCOMPLETE_CHUNKED_ENCODING
FilterMsg内容: REALNAME_UPLOAD_CONFIRM
TraceId: xxxx-xxxxxxx-xxxxxxxxxxxxxxx_1653898433
[16:15:43] {"errno":600001,"errMsg":"uploadFile:fail upload fail:-355:net::ERR_INCOMPLETE_CHUNKED_ENCODING"}
[16:15:43] uploadFile:fail upload fail:-355:net::ERR_INCOMPLETE_CHUNKED_ENCODING
微信开放社区相关问题:
- wx.downloadFile 下载图片资源出现异常?
- 微信小程序端不能上传图片报错?
- 关于ERR_INCOMPLETE_CHUNKED_ENCODING?
- net_error_list:INCOMPLETE_CHUNKED_ENCODING
- 提示net::ERR_INCOMPLETE_CHUNKED_ENCODING
服务端相关发现:
- 服务端框架中有记录生产环境日志
- 服务端生产环境中并未发现该条报错信息日志
- 原有的上传三张图片,服务端仅有两张上传图片日志
ℹ️注意: 初步结论为,代理服务器因图片大小超过限制,拒绝图片上传请求
根本原因
- Request entity too large 请求实体太大
- 上传文件过大,服务器有使用 nginx 做反向代理
解决方案
修改 nginx 配置文件,配置客户端请求体大小。
client_max_body_size 8M; ## (配置客户端请求体大小)
标题 | 内容 |
---|---|
语法 | client_max_body_size size; |
默认值 | client_max_body_size 1m; |
上下文 | http, server, location |
设置客户端请求体允许的最大值。如果请求大小超过配置值,则返回 413 (Request Entity Too Large)
错误到客户端。请注意浏览器无法正确展示该错误。把 size
设置为 0 则禁用客户端请求体大小检查
ℹ️注意: 腾讯云负载均衡文档中
client_max_body_size
默认值60M
, 但实测默认值和 nginx 一致为1M