https://tools.ietf.org/html/rfc7231#section-5.3.2指出
没有任何Accept标头字段的请求表示用户代理 将接受任何媒体类型作为响应。
也https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html指出
如果不存在“接受”标头字段,则假定 客户接受所有媒体类型。如果存在“接受”标头字段, 并且如果服务器无法发送可接受的响应,则根据 到合并的Accept字段值,然后服务器应该发送406 (不可接受)响应。
还是,在这种情况下发回406不可接受的消息是错误吗? 特别是,我们要强制客户编写支持版本的客户端代码(我们的内容类型已修改版本)。
答案 0 :(得分:1)
在这种情况下发回
406
不可接受是错误的吗?
简短的回答是是,答案在您自己的问题中。一旦RFC 2616不再相关,请考虑RFC 7231中的引号:
没有任何
Accept
头字段的请求表示用户代理将接受任何媒体类型作为响应。
RFC 7231的同一段规定了在什么情况下可以使用406
状态代码:
如果请求中存在标头字段,并且响应的可用表示形式均未列出可接受的媒体类型,则原始服务器可以通过发送
406
来接受标头字段(不是可接受)响应,或通过将响应视为未经内容协商的方式来忽略标头字段。
查看如何定义406
状态代码:
根据请求中收到的主动协商标头字段,
406
(不可接受)状态码表示目标资源不具有用户代理可接受的当前表示形式(第5.3节) ,并且服务器不愿意提供默认表示。
答案 1 :(得分:0)
是的,对于兼容服务器,这是错误的。缺少的接受标头应与接受所有内容类型一样对待。这并不意味着您仍然不能拒绝缺少的接受标头,因为许多安全工具已经这样做了:
如果您想保持合规性,可以发送一个400 error,它是通用的,但是406错误更有意义。