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 );
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终有链响

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值