调用A系统的时候,发现请求的header的Accept-Charset过长,请求报文如下
既然是Accept-Charset过长,那么就先了解下什么是Accept-Charset
Accept-Charset
请求头用来告知(服务器)客户端可以处理的字符集类型。 借助内容协商机制,服务器可以从诸多备选项中选择一项进行应用, 并使用Content-Type
应答头通知客户端它的选择。浏览器通常不会设置此项值,因为每种内容类型的默认值通常都是正确的,但是发送它会更有利于识别。如果服务器不能提供任何可以匹配的字符集的版本,那么理论上来说应该返回一个 406
(Not Acceptable,不被接受)的错误码。但是为了更好的用户体验,这种方法很少采用,取而代之的是将其忽略。
既然看了Accept-Charset,不妨再看看相关的参数
Accept-Encoding
首部明确说明了(接收端)可以接受的内容编码形式(所支持的压缩算法)。该首部的值是一个Q因子清单(例如 br, gzip;q=0.8),用来提示不同编码类型值的优先级顺序。默认值 identity 则优先级最低(除非声明为其他优先级)。将 HTTP 消息进行压缩是一种最重要的提升 Web 站点性能的方法。该方法会减小所要传输的数据量的大小,节省可用带宽。浏览器总是会发送该首部,服务器则应该配置为接受它,并且采用一定的压缩方案。
。。。找到一篇很详细的文章,就不一一粘贴了,https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Content_negotiation
言归正传,继续说header过长的问题
请求是通过RestTemplate发送的,发送之前设置header中的Accept-Charset,发现并没起作用
这就很奇怪,继续百度,发现RestTemplate初始化的时候,设置了MessageConverters,其中还有new StringHttpMessageConverter()
原来是需要特殊设置下StringHttpConvertoer,RestTemplate设置如下,然后问题解决了...
RestTemplate很好用,但是很多参数是需要自己设置的,否则就是默认值了...取默认值很可能效果不是最好的...