AJAX的POST请求在chrome浏览器报net::ERR_CONNECTION_RESET问题

背景说明

公司对前端的所有的AJAX请求做了统一的封装,因此业务上需要发起请求调用后端服务时,使用的都是公司封装好的工具。

由于ERR_CONNECTION_RESET问题比较粗,也就是说可能会有很多原因会导致浏览器报这个错,因此在网上可以找到非常多的解决方案,比如从本地网络连接上找原因的、从服务提供商那里找原因的、从DNS上找原因的,也有分析后端的大佬给出详细解析的。但是与我这边的情况不太相符,因为我这个是请求根本就没有到达后端,甚至可能都没有到nginx以及后面的tomcat

问题现象

  1. 以下是在chrome浏览器中的表现。

  2. 以下是fiddler
  3. wireshark

问题描述

  1. 报错的这个业务主要是用户输入一堆标准参数后,页面上会据此计算出一些对应的指标数据,然后在保存的时候把用户输入的参数,以及对应计算出来指标数据一起发给后端,使用的是公司统计一封装好的AJAX工具。
  2. 第一次收到报错的反馈时,发现非常可能是因为计算出来的结果没有修约,因此小数位数较长,导致请求体过大。于是加上了修约,限制了小数位数后,再次输入同样的数据保存,没有报错,问题解决。
  3. 后来又反馈报错,在chrome浏览器中有60%以上的机率可以复现。但是仅限于正式环境,测试环境和本地环境完全没有问题。怀疑是nginx或是tomcat的问题,于是使用Fiddler和wireshark进行了抓包,但得到的结果都是服务器没有返回任何内容。然后运维帮忙看了下服务器上nginx和tomcat的配置,对应的参数也设置的比较大,这个请求Content-Length16212,也不应该被拦截掉的。而且返现这个不仅与长度相关还和对应的字符相关,比如删除最后几个字符后,再加上比原来长的多的多的数字,然后再发起请求,也不会报错。
  4. 最后请教了顶头上司,上头给的建议是换下Content-Type,于是把application/x-www-form-urlencoded;charset=UTF-8换成了application/json,再发起请求时,就不报错了,问题解决。

解决方案

根据上司的建议,把Content-Type由原来的application/x-www-form-urlencoded;charset=UTF-8换成了application/json就好了。在网上查了下,好像是因为前者是最原始的类型了,因此有点小问题,比如会把空格换成+了什么的,当然了具体实际的原因还是不清楚的,只知道这样可以解决我遇到的这个问题。

相关推荐
天***88524 小时前
系统自动启动管理,文件粉碎、软件卸载、WIFI密码查看、硬盘测速、系统优化等
chrome
3秒一个大9 小时前
Cookie/Session vs JWT 双 Token:登录认证方案的演进与对比
前端·安全·ajax
Free Tester9 小时前
手动访问网页用的chrome,和使用命令行指定端口启动的chrome,浏览器指纹是否一致
前端·chrome
ShineWinsu9 小时前
Chrome安全机制深度解析技术文章
前端·chrome·安全
程序员 沐阳9 小时前
从内容管控到硬件隔离:Chrome 安全防护体系深度拆解
前端·chrome·安全
淼淼爱喝水10 小时前
Ansible 常用文件模块详解(copy、file、fetch)
chrome·git·github
华科易迅10 小时前
Vue通过Ajax获取后台路由信息
vue.js·ajax·okhttp
牛奶1 天前
浏览器是怎么把代码变成页面的?
前端·javascript·chrome
冬至喵喵1 天前
构建 CLI 的 Python 框架:Typer技术介绍
开发语言·chrome·python
牛奶1 天前
Chrome偷藏了你的JS!V8引擎到底做了什么?
前端·chrome·v8