如果缺少必需的标头,最合适的HTTP状态码是什么?

63

我阅读了What HTTP status response code should I use if the request is missing a required parameter?,但它并没有特别提到头文件(header),也没有达成共识。

这个问题的背景假设身份验证成功。我目前更倾向于使用400(尽管这并不感觉正确,因为这并不是“语法错误”),或者403。鉴于403的描述:

服务器理解请求,但拒绝满足它。授权不会有所帮助,请求不应该被重复。如果请求方法不是HEAD,并且服务器希望公开为什么未能满足请求,它应该在实体中描述拒绝的原因

这对我来说最有意义。

能否有人启发我?谢谢。

1个回答

79

400错误请求

这是一个用户在请求中的错误。与403错误不同的是,客户端应该被允许修改后重复发送请求:

10.4.1 400错误请求由于语法错误,服务器无法理解请求。客户端不应该在未做修改的情况下重复发送请求。

编辑

正如马克·里德在评论中指出的,403错误表示:“你所发送的请求没有问题。你有适当授权并且语法是有效的。我只是不想满足你的请求。”

加粗部分仅仅是告诉客户端,如果服务器选择这么做,它可以准确地告诉客户端为什么不想满足请求。


8
绝对是400错误。如果请求中有任何与服务器状态无关的问题,就是400错误。如果问题仅仅存在于服务器端("据你所知,这是一个完全有效的请求,但我不想执行"),那么就使用403错误。 - Mark Reed
412(前提条件失败)怎么办? - Adam Dyga
4
据我所知,HTTP 412 Precondition Failed状态码仅保留用于与If-MatchIf-Unmodified-Since头部一起使用。 - botchniaque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接