在一个正常划水的周三的下午,发现一个偷偷划水的不正常接口,在login(登陆)接口之后的getPerms接口突然报了400
哈! 400这种问题太好解决了,不用看就是参数的问题,不是参数类型错误就是参数名称错误.然鹅,这次并不是,你要问我为什么的话,我只能回答你,这个Get方法没有参数😂.
这个接口是个什么接口呢? 这个接口是用户登录之后根据用户角色获取用户权限树的一个接口,因为是公司的项目,代码我就不贴了,这里只说发生的原因,及如何解决的,给其他遇到类似问题的朋友提供一个排查的方向.
BUG的原因是因为request的header部分太大,超过了tomcat允许的最大值。默认情况下,tomcat(8.0版本)允许的http请求header的最大值是8024个字节(8KB),如何造成的呢,是因为在这个接口之前的login接口中,开发人员将用户的所用信息及权限信息一股脑的都塞到了request.getAttributes().put("userInfo",JSON.toJSONString(userLoginVO)); 而该用户信息有多大呢,单单是角色下的权限信息就达到了9.6KB,这个时候login接口请求成功之后,login后面的接口因为header部分太大就会造成请求失败,
这个BUG我们找了两天,为什么找了两天,刚开始定位不到问题,上网搜400的问题也找不到答案,只能通过一点点的测试寻找一些蛛丝马迹,你问我为什么不直接看错误日志,我只能说没有错误日志,看不到任何异常,在解决了这个问题之后,又到网上去搜head大小相关的问题才找到了一些相关的帖子,发现是有错误日志的,