【问题标题】:What's the appropriate HTTP status code when the request is missing a required cookie?当请求缺少必需的 cookie 时,适当的 HTTP 状态代码是什么?
【发布时间】:2016-04-18 14:37:12
【问题描述】:

我有一个 API 端点,并且请求应该有一个 cookie(不是身份验证)。如果不存在,返回的正确 HTTP 状态代码是什么?

我认为400 Bad Request 是最好的。

【问题讨论】:

  • 这是一个非常有用的帖子,谢谢。我会说它似乎没有回答我的问题。我到了 400 级别,看到一个标题列表,cookie 存储在 set-cookie 标题中,我在列表中看不到。
  • 似乎应该有一个“使用 Cookie 重新发送”和一个 Resend-Cookie-For-Domain 标头。浏览器可以默认配置为提示是否应该发送 cookie。人们可以在最大化隐私和最大化广告商资助服务的可用性之间进行权衡。

标签: http http-status-codes http-status


【解决方案1】:

您的问题中没有提供太多细节,但我猜400(错误请求)是一个不错的选择:

6.5.1. 400 Bad Request

400(错误请求)状态码表示服务器不能或 由于某些被认为是 客户端错误(例如,格式错误的请求语法、无效请求 消息框架或欺骗性请求路由)。

但是,根据您的要求,您也可以考虑在 WebDAV 规范中定义的 422(不可处理实体)状态代码,它只是 HTTP 协议的扩展:

11.2. 422 Unprocessable Entity

422(不可处理实体)状态码表示服务器 理解请求实体的内容类型(因此 415(不支持的媒体类型)状态码不合适),并且 请求实体的语法是正确的(因此是 400 (Bad Request) 状态码不合适)但无法处理包含的 指示。例如,如果 XML 请求正文包含格式正确(即语法正确),但是 语义错误的 XML 指令。


请记住在响应负载中提供一个很好的描述,解释请求中缺少什么。

【讨论】:

    【解决方案2】:

    我会考虑在这种情况下使用403 forbidden 状态代码 - 其他一切都很好,但请求缺少 cookie。要从链接参考中复制其详细信息:

    服务器理解请求但拒绝授权。

    如果请求中提供了身份验证凭据,则服务器认为它们不足以授予访问权限

    状态401 unauthorized 用于请求缺少身份验证凭据的情况。但是 401 还要求响应包含 WWW-Authenticate 标头字段。根据这个问题,请求应该有一个cookie但没有,这不是身份验证的问题。

    Status 400 是客户端请求错误的时候,这对于 OP 描述的场景可能有点误导。

    Status 422 可能是合适的,但我认为这有点太笼统了,因为这意味着一切正常,但服务器无法处理请求

    【讨论】:

    • 如果投反对票的人解释他们的投反对票而不是随意投反对票,这可能会有所帮助...
    • IMO 403 可能是正确的状态代码,如果 cookie 用于身份验证或授权
    猜你喜欢
    • 2019-03-30
    • 2012-05-21
    • 2016-06-12
    • 2011-03-04
    • 2015-01-16
    • 2018-02-03
    • 2012-03-11
    • 2012-07-12
    • 2018-02-24
    相关资源
    最近更新 更多