如果缺少必需的标头,返回的最合适的 HTTP 状态代码是啥?
Posted
技术标签:
【中文标题】如果缺少必需的标头,返回的最合适的 HTTP 状态代码是啥?【英文标题】:What is the most appropriate HTTP status code to return if a required header is missing?如果缺少必需的标头,返回的最合适的 HTTP 状态代码是什么? 【发布时间】:2012-05-21 13:23:08 【问题描述】:我阅读了What HTTP status response code should I use if the request is missing a required parameter?,但它没有专门询问标题,似乎也没有达成共识。
此问题的上下文假定身份验证成功。我目前偏爱 400(尽管这感觉不对,因为这不是“格式错误的语法”)或 403。鉴于 403 的描述:
服务器理解请求,但拒绝执行。 授权将无济于事,并且不应重复请求。 如果 请求方法不是 HEAD 并且服务器希望公开 为什么请求没有被满足,它应该描述原因 对于实体的拒绝。
这对我来说最有意义。
有人可以请教我吗?谢谢。
【问题讨论】:
【参考方案1】:400 错误请求
这是请求中的用户错误。与 403 不同,客户端应该被允许重复他们的请求,但只能在修改之后:
10.4.1 400 Bad Request 由于语法错误,服务器无法理解该请求。客户端不应该不加修改地重复请求。
编辑
正如 Mark Reed 在 cmets 中指出的那样,403 表示:“您发送给我的内容没有任何问题。您有适当的授权并且语法有效。我只是不想按照您的要求去做。”
粗体部分简单地说,如果服务器选择,它可以准确地告诉客户端为什么它不想满足请求。
【讨论】:
肯定是 400。如果请求有任何不依赖于服务器状态的问题,那就是 400。如果唯一的问题是在服务器端(“这是一个完美的 cromulent 请求,因为据你所知,但我没心情”),那么你使用 403。 感谢您的反馈,伙计们。 412(前置条件失败)呢? AFAIKHTTP 412 Precondition Failed
保留用于If-Match
和If-Unmodified-Since
标头。以上是关于如果缺少必需的标头,返回的最合适的 HTTP 状态代码是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如果请求缺少必需的参数,我应该使用啥 HTTP 状态响应代码?
当请求 API 的自定义标头错误时,将 http 状态代码设置为 417
当 http 状态不是 200 时,Slim 框架不发送 http 标头