Http 请求偶发400错误

1. 背景

  生产环境偶发400请求错误,发生概率万分之一,异常信息如下:

  1) 从异常信息可以看到,skywalking的sw8 header解析失效导致异常信息。

  2) 0x0d0x0a 作为回车换行符号,没有被正确处理,导致header的截断错误。

2. 排查过程

1) 怀疑skywalking的sw8 header头存在异常编码情况,导致header头格式错误,对sw8进行链路的反解,反解信息正常如下所示,因此排除skywalking的问题:

sw8:1-ZGM1YmQ1NzYzMTEwNGY1MDlmOGRhMGQ0MTcwZTU0ZGIuMTUzLjE3MTI4MTk1NjIyMjc0Mzgz-ZjlmZTAwMmJmZTNkNGE2MGFlNDQ5NWRhYTY1YzQ4NDQuMzI0Mi4xNzEyODE5NTYyMjYzMjgwNA==-1-ZW5kcG9pbnQtZ2F0ZXdheQ==-ZW5kcG9pbnQtZ2F0ZXdheUBuMTEwZWdrOHNhcDAwMDI=-SHlzdHJpeC9kcy9FeGVjdXRpb24=-MTAuMjEwLjkuMzU6MzAyOTI=

追踪ID:2f8b4d048cd345d2bce4fad6fb055fe0.150.17128195042681703

父追踪片段ID:2f8b4d048cd345d2bce4fad6fb055fe0.150.17128195042681703

-1-

父服务名称:endpoint-gateway

父服务实例标识,解码后为endpoint-gateway@n110egk8sap0002

父服务的端点:Hystrix/ds/Execution

本请求的目标地址: 10.210.9.35:30292

2) 通过异常堆栈,找到对应的异常代码逻辑org.apache.coyote.http11.Http11InputBuffer.parseHeader(), 可以发现tomcat是按数据包的字节流处理header的。正常情况下碰到CR LF会跳出循环处理header项,但是400异常情况下并没有。

3) 对请求进行抓包,发现400错误请求的TCP 包刚好截断在CR LF之间。

        由于第一个数据包截断在CR, 所以第一个数据包没办法处理sw8的header,会返回HeaderParseStatus.NEED_MORE_DATA等待第二个数据包的到来。

        当第二个数据包到达时,会对回车和换行符进行处理,但是由于tomact 9.0.31版本对LF处理有问题,当一个字符是LF时,被当作普通字符拼接到之前的数据流的末尾。

  此时,prevChr=0, 但是chr=LF,tomcat认为header格式异常,因此删除当前这个header进入异常打印逻辑。

   打印异常的时候,从当前位置往下读直到碰到回车换行符,也就是sw-correction:,因此异常打印到sw-correction header项。

   将控制符转化为16进制码进行打印,也就是异常里面0x0d0x0a的信息。

3. 问题复现

      由于问题需要发生在tcp包刚好截断在CRLF之间,因此比较难以复现,本地用socket程序模拟CRLF 截断。分别发送两个数据包,第一个包发送数据到CR,第二个包发送剩下的数据。

   成功复现了生产环境的错误。

4. 修复方案

   Tomcat 9.0.46 版本对类似问题进行了修复,https://bz.apache.org/bugzilla/show_bug.cgi?id=65272。因此升级tomcat到9.0.46以后的版本就可以解决这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/555134.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【配电网故障定位】基于二进制蝙蝠算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#80】

文章目录 【获取资源请见文章第6节:资源获取】1. 配电网故障定位2. 二进制蝙蝠算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节:资源获取】 1. 配电网故障定位 配电系统故障定位,即在配电网络发生故障的…

【笔试训练】day5

今天的题,最后一题忘公式了,卡了一会推出来了 1、游游的you 思路: 看清题目意思就行,这里的相邻两个o可以重复算,也就是说,“ooo”算2分。 先算you的得分,再算oo 对了,不开long lo…

IMX6ULL-UBOOT驱动移植

介绍 IMX6ULL正点原子开发板使用的是14x14_evk的芯片 其中14x14代表的是芯片的尺寸。 本教程的标识符以nsouther或者 NSOUTHER NSouther为主 添加板子自己的配置文件 板子的默认配置文件保存在 configs目录下,我们以mx6ull_14x14_evk_emmc_defconfig为主&#xf…

面试遇到的算法题

1.字符串转换整数 读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字…

Flume 入门教程

内容目录 Flume 简介 架构和基本概念 多种架构模式 Flume 安装部署 Flume 简介 Flume 是一个分布式、可靠且高可用的数据收集、聚合和传输系统,主要用于高效地处理大规模日志数据。设计之初,它主要服务于日志管理领域,但其灵活性和可扩展…

基于XML配置bean(二)

文章目录 1.工厂中获取bean1.静态工厂1.MyStaticFactory.java2.beans.xml3.测试 2.实例工厂1.MyInstanceFactory.java2.beans.xml3.测试 3.FactoryBean(重点)1.MyFactoryBean.java2.beans.xml3.测试 2.bean配置信息重用继承抽象bean1.beans.xml2.测试 3.…

多模态之BLIP—实现统一的视觉语言理解和生成,细节理解与论文详细阅读:Bootstrapping Language-Image Pre-training

BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation BLIP:引导语言图像预训练,实现统一的视觉语言理解和生成 Paper: https://arxiv.org/pdf/2201.12086.pdf Github: https://github.com/sa…

Ansys workbench连接器端子保持力仿真教程

端子保持力(Contact Retention Force)是电子连接器机械特性中的常见参数,它表达的是电子连接器(Connector)端子(Contact)保持在正常位置的能力。EIA专门为连接器端子保持力的测试制定了标准&…

输出100~200之间的质数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int n 100;int i 0;int result 0;//嵌套循环判断100~200之间的质数&#xff1b;for (n …

网络运输层之(3)GRE协议

网络运输层之(3)GRE协议 Author: Once Day Date: 2024年4月8日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…

316_C++_xml文件解析成map,可以放到QT表格上, 且 xml、xlsx文件可以互相解析

xml文件例如&#xff1a; <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <TrTable> <tr id"0" label"TR_PB_CH" text"CH%2"/> <tr id"4" label"TR_PB_CHN"…

HZNUCTF第五届校赛实践赛初赛 Web方向 WriteUp

ezssti 很简单的ssti 源码给了&#xff0c;调用Eval即可执行命令 package mainimport ("fmt""net/http""os/exec""strings""text/template" )type User struct {Id intName stringPasswd string }func (u User) Ev…

如何在阿里云主机上安装FreeBSD14系统

文章目录 在阿里云主机上安装FreeBSD14系统准备阿里云云主机识别目标磁盘下载 FreeBSD14解压缩 FreeBSD14系统镜像创建可启动的磁盘启动 FreeBSD14在阿里云主机上安装FreeBSD14系统 阿里云主机不支持 FreeBSD14 系统的镜像,因此需要手动进行安装。 准备阿里云云主机 在阿里云…

解决Git 不相关的分支合并

可以直接调到解决方案,接下来是原因分析和每步的解决方式 问题原因: 我之前在自己本机创建了一个初始化了Git仓库,后来有在另一个电脑初始化仓库,并没有clone自己在本机Git远程仓库地址,导致Git历史版本不相关 错误信息 From https://gitee.com/to-uphold-justice-for-other…

文字转语音工具:GPT-SoVITS

诸神缄默不语-个人CSDN博文目录 OpenAI官方的TTS模型我在这篇博文中给出了使用教程&#xff1a;ChatGPT 3.5 API的调用不全指南&#xff08;持续更新ing…&#xff09; - 知乎 但是OpenAI的TTS对中文支持不好&#xff0c;有一种老外说中文的美&#xff0c;所以本文介绍另一个…

Amazon SES邮箱API发送邮件的步骤是什么?

Amazon SES邮箱API发送邮件怎么配置&#xff1f;如何用邮箱API发送邮件&#xff1f; 在数字化时代&#xff0c;电子邮件已成为企业与个人之间沟通的重要桥梁。那么&#xff0c;使用Amazon SES邮箱API发送邮件的步骤究竟是怎样的呢&#xff1f;接下来&#xff0c;就让AokSend来…

IDEA远程调试debug

IDEA远程调试debug jar包启动脚本配置IDEA配置 通俗的说&#xff1a;本地有代码&#xff0c;服务器项目出现问题&#xff0c;环境的中间件配置不同&#xff0c;用idea远程调试&#xff0c;能快速定位问题&#xff0c;解决问题。 jar包启动脚本配置 jdk5-8写法 java -Xdebug -…

ChatGPT在遥感领域中的应用

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…

MCU的最佳存储方案CS创世 SD NAND

MCU的最佳存储方案CS创世 SD NAND 写在最前面MCU是什么CS创世 SD NAND 6大优势 写在最前面 转载自 雷龙官网 MCU是什么 大家都知道MCU是一种"麻雀"虽小&#xff0c;却"五脏俱全"的主控。它的应用领域非常广泛&#xff0c;小到手机手表&#xff0c;大到航空…

【Kafka】Kafka Tool工具的使用

抖音视频 https://www.douyin.com/user/self?modal_id7123007128150901256&showTablike CSDN文档 https://blog.csdn.net/qq_43961619/article/details/109381849