spring boot 中Feign调用提示Request header is too large 解决方案

简介: spring boot 中Feign调用提示Request header is too large 解决方案

异常

首先咱们上一下控制台打印异常:

16:06:58.970 [http-nio-9220-exec-1] INFO o.a.c.h.Http11Processor -

[log,182] - Error parsing HTTP request header Note: further

occurrences of HTTP header parsing errors will be logged at DEBUG

level. java.lang.IllegalArgumentException: Request header is too large

背景

微服务接口中有一个业务,需要调用客户端接口转入了base64编码后的字符编码文件

原因:

初步一看是请求头里面携带的参数太大了导致的,默认咱们请求头允许携带的数据大小是。默认情况下,tomcat(8.0版本)允许的http请求header的最大值是8024个字节(8KB)

解决方案一(不推荐)

设置请求头大小后,重启服务即可

server:
  max-http-header-size: 102400 #文件上转大小字节

为什么不推荐方案一

刚刚开始这样是能解决问题,但是后来自己仔细一想主要有2个方面的问题,

  • 1,这样是控制了最大上转文件大小,那么如果文件大小超过了怎么办呢,必须要人工手动调整
  • 2,这样处理还有一个致命性问题,也就是请求头里面携带大量参数也就是会导致一个句柄连接承载资源过重,严重影响服务的吞吐量,特别是并发大的情况下。故不推荐。

解决方案二

我们使用Feign调用时,默认会将参数header中也存放一份,所以就导致了header is too large,使用MultiValueMap解决这种问题了。

服务端:

/**
 * 上传图片、视频,文件
 */
 @PostMapping(value = "/test" )
public ResultDTO test(@RequestBody  MultiValueMap<String,String> map )  throws IOException{
     String base64 = map.getFirst("key");
     System.out.println(base64);
     MultipartFile multipartFile = BASE64DecodedMultipartFileUtil.base64ToMultipart(base64);
     return ResultDTO.requestSuccess(ossService.upload(multipartFile,1));

客户端:

/***
 * 上转文件
 * @param map
 * @return
 */
@PostMapping(value = "inner/file/test")
ResultDTO test(MultiValueMap<String,String> map );
相关文章
|
JavaScript 前端开发 Java
Idea启动SpringBoot程序报错:Veb server failed to start. Port 8082 was already in use;端口冲突的原理与解决方案
本文解决了Idea启动SpringBoot程序报错:Veb server failed to start. Port 8082 was already in use的问题,并通过介绍端口的使用原理和操作系统的端口管理机制,可以更有效地解决端口冲突问题,并确保Web服务器能够顺利启动和运行。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
SQL 前端开发 Java
深入分析 Spring Boot 项目开发中的常见问题与解决方案
本文深入分析了Spring Boot项目开发中的常见问题与解决方案,涵盖视图路径冲突(Circular View Path)、ECharts图表数据异常及SQL唯一约束冲突等典型场景。通过实际案例剖析问题成因,并提供具体解决方法,如优化视图解析器配置、改进数据查询逻辑以及合理使用外键约束。同时复习了Spring MVC视图解析原理与数据库完整性知识,强调细节处理和数据验证的重要性,为开发者提供实用参考。
629 0
|
Java Maven Spring
SpringBoot项目创建失败或无法启动,启动报错时的常见问题及解决方案
文章列举了在IDEA中创建Spring Boot项目时可能遇到的常见问题及其解决方案,如项目不被识别为Maven项目、依赖未找到或报红、JDK版本不一致和POM文件中的Jar包下载失败等问题。
6801 0
SpringBoot项目创建失败或无法启动,启动报错时的常见问题及解决方案
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
1557 3
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
2131 0
|
缓存 Java 微服务
Springboot微服务整合缓存的时候报循环依赖的错误 两种解决方案
Springboot微服务整合缓存的时候报循环依赖的错误 两种解决方案
801 1
|
Java API Spring
Spring Boot中使用Feign进行HTTP请求
Spring Boot中使用Feign进行HTTP请求
|
NoSQL Java 关系型数据库
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作
307 0
|
NoSQL Java 关系型数据库
非关系型数据库NoSQL数据层解决方案 之 redis springboot整合与读写操作 2024详解以及window版redis5.0.14下载
非关系型数据库NoSQL数据层解决方案 之 redis springboot整合与读写操作 2024详解以及window版redis5.0.14下载
287 0