1.问题描述
java用apache httpclient请求目标应用,目标应用使用jetty+springMvc提供服务,请求的参数使用@RequestParam方式接收,故用a=A&b=B&c=C把请求参数直接追加到url方式调用目标应用,当参数过多时候,发现服务起jetty日志报“413 HEAD FULL”错误
解决方法一:
google搜索对应错误关键字查找解决办法,发现可以通过调整jetty参数配置解决,鉴于当前url长度已经大与一万个字节,直接修改requestHeaderSize大小为16K(16384),重启服务,再次请求目标应用,问题解决。(不知为何url的长度受到requestHeaderSize参数控制,这个看起来像是设置请求头大小的)
解决方法二:
这样的服务可能有很多,每个都修改配置并重启服务肯定不现实。来自postman的灵感,post请求中url+?a=A&b=B&c=C在postman中可以用以下方式替换,证明k=v这样表单数据也是可以放到body里面请求的(之前一直以为只有json格式,请求头Content-Type=application/json才可以)
修改java程序中参数传递方式把a=A&b=B&c=C这样的参数放到entity中即可,例如
httpPost.setEntity(new StringEntity(“a=A&b=B&c=C”, “UTF-8”));
《解决413 HEAD FULL错误》 https://stackoverflow.com/questions/19333998/413-full-head-error
《jetty参数配置以及默认值(官方)》 http://wiki.eclipse.org/Jetty/Howto/Configure_Connectors
《jetty对请求头大小的控制 》https://cosmo1987.iteye.com/blog/2016975
《jetty配置链接器》 https://blog.csdn.net/tomato__/article/details/32697679