发送带有客户端请求的406的有效HTTP是否没有Accept标头

时间:2018-08-01 10:34:51

标签: http

https://tools.ietf.org/html/rfc7231#section-5.3.2指出

  

没有任何Accept标头字段的请求表示用户代理   将接受任何媒体类型作为响应。

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html指出

  

如果不存在“接受”标头字段,则假定   客户接受所有媒体类型。如果存在“接受”标头字段,   并且如果服务器无法发送可接受的响应,则根据   到合并的Accept字段值,然后服务器应该发送406   (不可接受)响应。

还是,在这种情况下发回406不可接受的消息是错误吗? 特别是,我们要强制客户编写支持版本的客户端代码(我们的内容类型已修改版本)。

2 个答案:

答案 0 :(得分:1)

  

在这种情况下发回406不可接受是错误的吗?

简短的回答是,答案在您自己的问题中。一旦RFC 2616不再相关,请考虑RFC 7231中的引号:

  

没有任何Accept头字段的请求表示用户代理将接受任何媒体类型作为响应。

RFC 7231的同一段规定了在什么情况下可以使用406状态代码:

  

如果请求中存在标头字段,并且响应的可用表示形式均未列出可接受的媒体类型,则原始服务器可以通过发送406来接受标头字段(不是可接受)响应,或通过将响应视为未经内容协商的方式来忽略标头字段。

查看如何定义406状态代码:

  

6.5.6. 406 Not Acceptable

     

根据请求中收到的主动协商标头字段,406(不可接受)状态码表示目标资源不具有用户代理可接受的当前表示形式(第5.3节) ,并且服务器不愿意提供默认表示。

答案 1 :(得分:0)

是的,对于兼容服务器,这是错误的。缺少的接受标头应与接受所有内容类型一样对待。这并不意味着您仍然不能拒绝缺少的接受标头,因为许多安全工具已经这样做了:

如果您想保持合规性,可以发送一个400 error,它是通用的,但是406错误更有意义。