背景:项目使用的是微服务架构,采用springboot来开发,所有的服务都是基于内嵌tomcat来运行
问题:项目部署到测试环境之后,偶尔在后台日志会看到这样的日志:Feign status 400 reading XXXX content:
调查后发现是get请求参数太长的缘故,将参数打印出来,发现最长的有12KB,而内嵌tomcat对参数的默认限制是8K,在tomcat的org.apache.coyote.http11.AbstractHttp11Protocol类中定义了其默认值,如下:
/** * Maximum size of the HTTP message header. */ private int maxHttpHeaderSize = 8 * 1024; public int getMaxHttpHeaderSize() { return maxHttpHeaderSize; } public void setMaxHttpHeaderSize(int valueI) { maxHttpHeaderSize = valueI; }
解决方案:
在Feign接口提供端的微服务中配置参数:
server:
max-http-header-size: 20480