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 );
相关文章
|
26天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
48 2
|
1月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
143 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
1月前
|
Java 关系型数据库 开发工具
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
本文提供了解决方案,如何在IDEA中创建Spring 2.X版本的项目并使用JDK8,尽管Spring 2.X已停止维护且IDEA不再直接支持,通过修改pom.xml或使用阿里云的国内源来创建项目。
69 0
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
|
1月前
|
Java Maven Spring
SpringBoot项目创建失败或无法启动,启动报错时的常见问题及解决方案
文章列举了在IDEA中创建Spring Boot项目时可能遇到的常见问题及其解决方案,如项目不被识别为Maven项目、依赖未找到或报红、JDK版本不一致和POM文件中的Jar包下载失败等问题。
163 0
SpringBoot项目创建失败或无法启动,启动报错时的常见问题及解决方案
|
2月前
|
Java 开发工具 对象存储
简化配置管理:Spring Cloud Config与Netflix OSS中的动态配置解决方案
简化配置管理:Spring Cloud Config与Netflix OSS中的动态配置解决方案
45 2
|
2月前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
|
1月前
|
Java Maven Spring
用Spring导致的无法运行Java文件的问题的解决方案
本文提供了解决在IntelliJ IDEA社区版中使用Spring Initializr插件创建Spring项目后,Java文件无法运行的问题的方法,主要是通过加载Maven项目来解决。
67 0
|
2月前
|
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的问题
372 0
|
3月前
|
JavaScript Java Spring
SpringBoot 接口输出文件流 & Vue 下载文件流,获取 Header 中的文件名
SpringBoot 接口输出文件流 & Vue 下载文件流,获取 Header 中的文件名
195 0