前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Feign请求中Request header is too large 解决方案

Feign请求中Request header is too large 解决方案

作者头像
终有链响
发布2024-07-29 18:48:36
990
发布2024-07-29 18:48:36
举报
文章被收录于专栏:终有链响

异常

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

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)

解决方案一(不推荐)

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

代码语言:javascript
复制
server:
  max-http-header-size: 102400 #文件上转大小字节

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

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

解决方案二

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

服务端:

代码语言:javascript
复制
/**
 * 上传图片、视频,文件
 */
 @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));
}

客户端:

代码语言:javascript
复制
/***
 * 上转文件
 * @param map
 * @return
 */
@PostMapping(value = "inner/file/test")
ResultDTO test(MultiValueMap<String,String> map );
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 异常
  • 背景
  • 原因:
  • 解决方案一(不推荐)
  • 解决方案二
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档