话不多说,直入正题。首先我们看下HTTP状态码415和406,官方定义
状态码 | 含义 |
---|---|
415 | 对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。 |
406 | 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。 除非这是一个 HEAD 请求,否则该响应就应当返回一个包含可以让用户或者浏览器从中选择最合适的实体特性以及地址列表的实体。实体的格式由 Content-Type 头中定义的媒体类型决定。浏览器可以根据格式及自身能力自行作出最佳选择。但是,规范中并没有定义任何作出此类自动选择的标准。 |
介绍下使用场景,客户端请求body为xml格式,中间一层nginx反向代理,然后是上游服务。在使用过程中,一开始设定content-type:text/xml,然后发现客户端不断有415的状态返回。经过调试,将content-type修改为application/xml后415的问题没有了,但是又出现了406的问题。
经过网上调研,将header中设置Accept:application/xml; 至此,415和406问题全部解决。
附上两个header的区别:
(1)Accept代表发送端(客户端)希望接受的数据类型。
比如:Accept:text/xml;
代表客户端希望接受的数据类型是xml类型
(2)Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。
比如:Content-Type:text/html;
代表发送端发送的数据格式是html。