文件分片上传接口(Easyswoole)被nginx拦截,并返回状态码400和408的抓包排查过程

场景:前端上传的视频文件过大,做了一个分片上传的接口, 调试接口的时候,后端EasySwoole 程序接收不到请求,前端发现接口返回状态码408

遇到的问题:一个文件分三片上传,第一次请求接口正常,后面第二次请求就被nginx拦截,返回状态码400,紧接着请求又返回408,前端是App不好调试,只能从nginx和网络抓包分析问题

问题排查过程:

php程序接口日志无输出,直接打开Nginxaccess .log****,看日志:****

第一次请求成功,状态码是200。

第二次就请求失败了,状态码是400,

然后前端进行两次重传也是失败了,返回状态码还变成了408

因为前端是App调用的接口,看不到详细请求,只能在服务器抓包,Wireshark********分析前端的请求发现:

请求成功的是一个完整的http 请求,是流0,红色的标识客户端(App)发送的入参,每一个参数末尾有分隔符boundary

追踪这个流到流1,就是失败的请求,因为文件参数结尾没有boundary,服务器读取不了入参, 直接被 nginx 拦截了返回400, 也就没有响应数据。

前端进行重传的流2 和流3,nginx 还是接收不到完整的参数就返回了408

Nginx********文档描述:

在设置的超时时间参数client_header_timeout 和client_body_timeout 的时间内,服务端没有读取到正常的请求头和请求体,就会返回408,但是这个问题说明了服务端在接收两次请求都没有读取到对应的请求体,nginx 也会返回408,跟时间无关,修改时间参数解决不了问题

最后由前端手动加上了入参的boundary,就能正常上传:

相关推荐
meilindehuzi_a6 分钟前
从浏览器输入 URL 到页面显示:DNS、Nginx、后端与 CDN 全链路解析
运维·nginx
mengge.cloud25 分钟前
云计算&服务器基础小白教程
android·linux·运维·服务器·网络·云计算
一路向北finish27 分钟前
《Hadoop 高可用集群与 OpenStack Mitaka 控制节点部署全流程实操排坑指南》
大数据·linux·运维·服务器·hadoop·openstack
南棱笑笑生33 分钟前
20260826解决在Ubuntu22.04系统下编译RK3572的Buildroot【linux-6.12.69】出现CMake异常的问题
linux·运维·服务器
hh95037 分钟前
Agent Plan x DeepSeek Harness:分布式Agent集群调度与负载均衡
运维·分布式·负载均衡·adg·agent plan·adg成都社区
FIT2CLOUD飞致云38 分钟前
3分钟通过1Panel搭建安全隔离的DeepSeek Harness
运维·开源·1panel·运维面板
NGINX开源社区43 分钟前
使用 F5 NGINX Gateway Fabric 实现 AI 交付标准化
nginx·gateway·fabric
王志来137944730081 小时前
多元场景催生工控服务器机箱差异化需求匀天以柔性适配回应行业挑战
运维·服务器·人工智能·python
小张同学a.2 小时前
OpenStack 私有云实战 2—— Glance 镜像与 Nova 计算服务搭建
linux·运维·服务器·openstack