【问题标题】:Should I return 501/505 HTTP status or 400/404我应该返回 501/505 HTTP 状态还是 400/404
【发布时间】:2016-02-04 03:26:46
【问题描述】:

如果我有一个正在运行的 tomcat 服务器并向一个不存在的资源发出 GET 请求,我希望响应状态为 404 未找到。但是,如果我使用不受支持的方法(例如“nGET”)向同一个不存在的资源发出请求,那么我会收到状态为 501 的响应。这是正确的吗?我会假设如果资源不存在,那么我会得到 404。

同样的问题也适用于 505,如果我使用不受支持的协议版本向不存在的资源向 Tomcat 发出请求,我应该期待 404 还是 505?

【问题讨论】:

  • 哪个代码具有先例,它在规范中的什么地方提到了这一点?

标签: apache http tomcat http-status-code-404 http-status-codes


【解决方案1】:

关于 400 类响应代码的 HTTP 1.1 规范: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4

10.4 客户端错误 4xx

4xx 类状态码适用于客户端似乎出错的情况......

还有 500 类响应代码:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5

10.5 服务器错误 5xx

以数字“5”开头的响应状态码表示服务器知道自己出错或无法执行请求的情况

一个状态没有提到它优先于另一个,这应该是你要传达的最重要的状态代码的问题。

当我使用不受支持的方法请求丢失的资源时,尝试默认的 Apache 2.2 安装(不带 Tomcat)似乎会响应 501 Method Not Implemented 响应,这更多地指向服务器问题 - 这似乎类似于 Apache +Tomcat 的行为。

相反,如果再次向 Amazon CloudFront 端点发出请求,但同时缺少资源和不受支持的方法,则会返回 400 Bad Request 响应,表明这更倾向于传达客户端错误。

在一天结束时,如果您遇到不止一个问题,您最好让客户同时解决这两个问题。只要您在只有一个问题时返回一个正确的响应代码,尝试以特定顺序解决多个问题是一个品味问题。请注意,400 类和 500 类定义都包含以下短语:

用户代理应该向用户显示任何包含的实体

您可以在您认为合适的响应正文中包含任何详细信息,在存在多个问题的情况下,这意味着您可以包含文本来描述请求的所有问题。

【讨论】:

    【解决方案2】:

    我相信这两个 500 状态代码在某种意义上会优先于未找到的 404。我将 501 和 505 视为服务器响应 HTTP 请求的性质,然后才尝试以任何有意义的方式解析请求。因为它实际上会在它试图找到所请求的资源之前说“我没有回答那个请求方法或 HTTP 版本”,所以我预计这 500 错误中的任何一个都会在收到 404 之前发生。

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 2017-08-10
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2013-12-04
      • 2017-07-29
      • 1970-01-01
      相关资源
      最近更新 更多