接口请求异常,状态码为400 – Bad Request_接口400报错_我的蜡笔丢了的博客-程序员秘密

技术标签: spring  java  http  问题记录  

背景

项目中,请求接口的时候部分成功部分失败,失败的接口返回400 Bad Request。接口是先通过网关,在网关中将用户的信息封装到header中,然后去请求具体的服务。

具体的报错日志如下:

排查过程

项目的业务逻辑背景:

接口是能正常到网关中的,通过各个过滤器后理论上下一步就是到具体的服务中去,但是具体的服务没有接收到这个请求。也就是网关处理完后到具体服务这个过程中,请求丢失了或失效的。

然后发现部分正常的接口中,请求头中封装的用户信息是比较少的,而不正常的接口中,请求头中封装的用户信息是比较多的。

问题定位:

请求发送后最直接的反馈是400 Bad Request 程序没有看到任何报错日志,过了一段时间后请求的服务在日志中会输出:

2021-11-26 17:29:03.577  INFO 28521 --- [io-32215-exec-2] o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Request header is too large
	at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:721) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.coyote.http11.Http11InputBuffer.parseHeader(Http11InputBuffer.java:874) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.coyote.http11.Http11InputBuffer.parseHeaders(Http11InputBuffer.java:564) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:309) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_221]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_221]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_221]

然后这个报错不一定是一直会输出的,测试了一个晚上后面回去看日志只输了4次。这个原因暂时不明确。

回去网关把增强封装用户信息的在网关打印出来,通过String类的getBytes函数对大小进行评估,发现有问题的请求头信息大小为17k.......

springboot2.x版本中,http/1.1请求的最大头大小默认是8k,在org.apache.coyote.http11包下的AbstractHttp11Protocol有个属性,如下:

问题解决

那么知道问题是因为请求头大小超过springboot允许的最大限制。那么针对业务对问题进行解决。

方案一:

限制请求头的大小,不要让请求头的大小超出允许限制。(本人采取的限制,因为业务中,请求头的信息是在网关中需要检验的用户信息,不需要流到具体的服务中去)

方案二:

调大springboot中允许的最大限制,在配置文件中设置即可。对应的参数:server.max-http-header-size .至于调大这个参数会不会导致其他连锁反应,暂时不请求。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ice_kind/article/details/121566311

智能推荐

阿里云服务器CentOs中安装MySQL-5.7_念雪、难忘的博客-程序员秘密

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码

训练集和测试集_zjykshen的博客-程序员秘密

训练集(Training Set):帮助我们训练模型,简单的说就是通过训练集的数据让我们确定拟合曲线的参数。,训练集用来估计模型。验证集(Validation Set):用来做模型选择(model selection),即做模型的最终优化及确定的,用来辅助我们的模型的构建,可选;测试集(Test Set): 为了测试已经训练好的模型的精确度。当然,test set这并不能保证模型的正确性...

java后端使用phantomjs生成echarts图片_码农-文若书生的博客-程序员秘密

很多时候需要自动生成一些文档,并在文档中插入一些图片,一般B/S系统中图片由Echarts生成,但文档在java后台生成,这时怎样在后台调用Echarts的功能呢?答案是phantomJS。1、安装phantomJS下载地址:https://bitbucket.org/ariya/phantomjs/downloads/,国内镜像地址:http://npm.taobao.org/dist/phantomjs/有各种版本的,我这里以windows为例。2、下载EchartsConvert下载地址.

TensorBoard 计算图的可视化_tensorboard可视化计算图_yichudu的博客-程序员秘密

tensorflow 配套的可视化工具, 将你的计算图画出来.当训练一个巨大的网络的时候, 计算图既复杂又令人困惑. TensorBoard 提供了一系列的组件, 可以看到 learning rate 的变化, 看到 objective function 的变化.tfboard 读取 tf 运行时你记下的 events files, 来进行可视化. 这些 events files 包含了你记下的 summary data, 它是 protobuffer 格式, 并非文本文件.

3D点云系列(一)点云介绍_三维点云医学_edward_zcl的博客-程序员秘密

点云数据简介 点云数据(point cloud data)是指在一个三维坐标系统中的一组向量的集合。扫描资料以点的形式记录,每一个点包含有三维坐标,有些可能含有颜色信息(RGB)或反射强度信息(Intensity)。 我们常用的点云数据为激光雷达采集的数据,激光雷达的非接触式测量特点,具有测量速度快、精度高、识别准确等优点,成为移动机器人定位导航的核心传感器。在激光雷达技术领域中,目前主要通过三角测距法与TOF方法来进行测...

2020年苹果开发者资质验证流程以及失败后提示未能验证证件_苹果开发者账号没办法接受验证_MuSoul的博客-程序员秘密

新的审核方式??文章吐槽的比较多,着急解决问题的小伙伴们,直接看最后就好上个月,给公司的开发者账号续费的时候,猛然发现原本该显示续费按钮的地方突然变成了learn more。 ???一开始以为是什么新的隐私协议之类的,点进去才发现,要下载Apple developer App进行开发者认证???,这特么什么鬼,麻溜下载一个,点开并登入AppleID,在我的tab中,出现了一行 现在认证 的it...

随便推点

kubectl命令补全出错:kubectl ge-bash: _get_comp_words_by_ref: command not found_琦彦的博客-程序员秘密

安装kubernets后,使用source <(kubectl completion bash)报错kubectl ge-bash: _get_comp_words_by_ref: command not found解决办法:# yum install -y bash-completion# source /usr/share/bash-completion/bash_c...

微服务学习四--康威定律如何解释微服务的合理性_霍夫曼的博客-程序员秘密

  康威定律    1、Communication dictates design(组织沟通方式会通过系统设计表达出来)    2、There is never enough time to do something right, but there is always enough time to do it over(时间再多一件事情也不可能做的完美,但总有时间做完一件事情) ...

内存泄漏问题排查_善守的大龙猫的博客-程序员秘密

ThreadLocal的value值存在哪里?ThreadLocal类set方法ThreadLocal类get方法ThreadLocal相关类的关系总结ThreadLocal内存模型原理强引用弱引用的概念强引用弱引用软引用虚引用内存泄露是不是弱引用的锅?ThreadLocal最佳实践组内来了一个实习生,看这小伙子春光满面、精神抖擞、头发微少,我心头一喜:绝对是个潜力股。于是我找经理申请亲自来带他,为了帮助小伙子快速成长,我给他分了一个需求,这不需求刚上线几天就出网..

Backup Exec 在Windows平台下安装、设置及对Oracle数据库备份详细说明_Evilven的博客-程序员秘密

Backup Exec 在Windows平台下安装、设置及对Oracle数据库备份详细说明一、备份软件的要求及功能:在Windows平台下使用Backup Exec对现有Oracle数据库进行网络异地备份。使数据管理员在数据库出现问题或损坏时以及Oracle数据库服务器硬件出现故障时可以及时、快速对数据库进行恢复。图下所示。二、Oracle数据库端:请按照以下步骤一步一步对Oracle数据库端进行安装和配置:1. 首先双击运行光盘中的Autorun,弹出如图1所示窗口,单击选择32.

ORA-06550 PLS-00103:出现符号“DROP”在需要下列之一时:_weixin_30384217的博客-程序员秘密

begin end之间 执行drop和create、alter 这样的语句要这么执行:execute immediate 'drop table table_name';转载于:https://www.cnblogs.com/yuanzhongkui/p/4105856.html