快捷搜索: 王者荣耀 脱发

java发送get请求400解决

http发送get请求400问题解决小记:

仿佛代码有了保质期,项目在生产环境稳定运转,由于关联系统的升级意外暴露出http发送get请求的400错误。正产运行的请求为什么会突然变成400呢?难道真的是代码有保质期吗?

带着这样的疑惑,进行了一番的探索。首先,系统升级必然是要做兼容性考虑的,就可以排除是升级造成的问题;接着要追踪日志,根据错误信息定位问题。

首先,HTTP 400 Bad Request 原因如下:

1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求

2、请求参数有误

脑海中的第一反应连自己都怀疑人生了。。。这明明是之前正常运行的程序啊!!!

What is a 400 Bad Request Error?

更加离谱的是,用postman进行请求,或者是swagger,亦或是curl命令均可以得到正确的返回,真是奇葩啊!秉着遇到困难越挫越勇的精神,不破此局不罢休。突然想到了资源占用?http发送get请求的底层机制究竟是怎么回事呢?带着疑惑回归代码本身。

场景:java服务A发送一个http的get请求到B服务,在很长一段时间内能得到正常相应的,而在生产环境得到400错误后,用postman去测试还是能得到正常的响应。

HttpUtil.get(url);

分析:如此看来就是postman等接口测试并没有复现生产上的问题,基于对400错误的理解,就是服务调用方出现了问题,那是什么原因导致的400呢 ?

原来http在发送get请求的时候,会对cookie进行叠加,长时间的运转呢,导致cookie越来越长,最终出现header超长的400错误。

解决办法:确认服务双端对cookie没有业务需求的处理,服务调用方禁用cookie 即可。

HttpRequest.get(url).disableCookie().timeout(3000).execute().body();

基于本人读源码的能力有限,此处不展示源码图片,希望看到的小伙伴多多指教。。。如有不同的见解,望留言,多谢!

经验分享 程序员 微信小程序 职场和发展