彻底解决:80 端口 GET/POST 正常,PUT 却报 ERR_CONNECTION_RESET?

太长不看版(结论):

如果你的代码本地运行完美,上线后仅 80/443 端口PUT/DELETE 请求报错(Connection Reset),而其他端口(如 8080)正常。
不用查代码了,99% 是内网 WAF 或防火墙把 80 端口的非 GET/POST 请求拦截了!


一、 快速自查:是不是遇到了这种情况?

在排查前,请对比症状:

  • 环境架构: Vue3 + Nginx (80端口) -> Java 后端 (8082端口)
  • GET/POST 成功
  • PUT/DELETE 报错: 浏览器控制台爆红 net::ERR_CONNECTION_RESET,感觉连接瞬间被掐断。
  • 绕过 Nginx 就好了: 前端如果直连后端 Java 端口(如 8082),PUT 请求是通的。
  • 换个端口也通了: 把 Nginx 监听从 80 改成 8888,发现 PUT 也通了。

二、 逐层排查(看看到底哪层出了鬼)

遇到这种问题,我们要像剥洋葱一样,从内到外一层层排除,直到抓到真凶。

第一步:排除后端代码

  • 操作:服务器本地 执行 curl -X PUT http://127.0.0.1:8082/api/test
  • 结果: 成功。说明后端 Java 程序支持 PUT,代码没写错。

第二步:排除 Nginx 配置

  • 操作: 在服务器本地,执行 curl -X PUT http://127.0.0.1:80/api/test(即走 80 端口转发)。
  • 结果: 成功
  • 结论: 只要流量不出服务器网卡 ,80 端口的 PUT 就是通的。这说明 Nginx 转发逻辑和配置文件(如 proxy_pass)都是对的。

第三步:排查是否网络拦截?

  • 对比实验: 修改 Nginx 配置文件,监听端口从 80 改为 8090,重启 Nginx。
  • 结果: 浏览器再次请求,成功了
  • 真相: 拦截发生在浏览器和服务器之间。

三、 分析:那为什么 80 端口会被"特殊照顾"?

为什么 80 端口的 PUT 请求会被防火墙直接发 RST 信号强行断开?

  1. 策略太保守: 很多老旧的防火墙或 WAF(Web 应用防火墙)认为 80/443 是标准 Web 端口,只应该跑 GET 和 POST。PUT 和 DELETE 被视为"写文件/删文件"的高危操作,默认直接干掉。
  2. 防火墙通常对 8090、8082 这种"非标端口"管得比较松,这些被认为是内部测试用的,扫描策略没那么严,所以反而能"躲过一劫"。
  3. 连接重置的本质: 当防火墙检测到 80 端口出现了它不喜欢的 PUT 包,它会伪装成目标服务器给浏览器发一个 RST 包 。浏览器以为服务器"挂了"或者"拒接",于是报错 CONNECTION_RESET

四、 避坑总结:三步走解决问题

以后再遇到类似的"本地通,上线挂"的问题,直接三步走:

  1. 本地 Curl 试一下: 排除后端代码嫌疑。
  2. 回环地址(127.0.0.1)试一下: 排除 Nginx 配置嫌疑。
  3. 换个非 80 端口试一下: 如果换端口好了,就把问题甩给运维,让他们开防火墙策略。

写在最后:

如果"流量不出网卡是好的,一出网卡就炸了"。那这种问题往往不在代码,而在那些看不见的网络黑盒里。


如果你觉得这篇排雷笔记有用,欢迎点赞、收藏!如有疑问,评论区见。

相关推荐
aidou131418 小时前
Vue3自定义实现日期选择器(可单选或多选)
前端·javascript·vue.js·日期选择器·transition
mfxcyh18 小时前
基于xml、注解、JavaConfig实现spring的ioc
xml·java·spring
Flittly18 小时前
【SpringAIAlibaba新手村系列】(13)Tool Calling 函数工具调用技术
java·spring boot·spring·ai
xdscode18 小时前
Spring 依赖注入方式全景解析
java·后端·spring
爱吃烤鸡翅的酸菜鱼18 小时前
Java 事件发布-订阅机制全解析:从原生实现到主流中间件
java·中间件·wpf·事件·发布订阅
无限码力18 小时前
华为OD技术面真题 - JAVA开发- spring框架 - 7
java·开发语言·华为od·华为od面试真题·华为odjava八股文·华为odjava开发题目·华为odjava开发高频题目
Lyyaoo.18 小时前
【JAVA基础面经】JAVA中的异常
java·开发语言
my_styles18 小时前
linux系统下安装 tengine / 宝兰德等国产信创中间件和闭坑
linux·运维·服务器·spring boot·nginx·中间件
一定要AK19 小时前
JVM 全体系深度解析笔记
java·jvm·笔记
coder阿龙19 小时前
基于SpringAI+Qdrant+Ollama本地模型和向量数据库开发问答和RAG检索
java·数据库·spring boot·ai·数据库开发