前言
某天,正当某无名程序员小哥在UAT发布新版本兴致勃勃地准备线上测试的时候,发现程序居然出错了,小哥马上通过线上检查log发现当call某个第三方系统API的时候抛出400 Bad Request错误。此时第一反应是会不会是我的配置或者请求拼错了?于是小哥一顿操作各种检查,检查配置,网络,加了一些log打印相关信息,并且跟SIT环境做了比对(SIT环境是正常的),最后发现都没问题。此时小哥断定,问题应该是出在第三方API了,于是小哥马上去找了第三方系统的开发负责人,很不幸的是人家请假了,而且人家只有一个后端开发,于是问题只能拖到第二天去解决了。于是因为这个问题小哥晚上失眠了,怕因为自己的问题影响了第二天的UAT测试。
找到问题
第二天一早,小哥终于等来了第三方系统开发负责人上线,马上一阵亲切问候后开始一起排查问题,此处又是一堆麻烦的log和trigger,主要是第三方系统打印的log太多所以花了一些时间,最后发现报错是request header too long. 终于找到问题了。马上查了一下,发现spring配置了默认max-http-header-size为8kb,应该是我UAT封装的header size超过8kb了,UAT的header默认加了很多配置进去,SIT没有加那么多配置所以没报错。http header超过8kb会报错:400 Bad Request。
spring官方文档配置的默认max-http-header-size为8kb
postman查看request size
解决
找到问题就好办了,于是我叫第三方系统开发在yml配置文件把max-http-header-size设置成16kb,重新发布postman试了一下接口,通了,到此问题解决。
server:
max-http-header-size: 16