我应该 return 501/505 HTTP 状态还是 400/404
Should I return 501/505 HTTP status or 400/404
如果我有一个 tomcat 服务器 运行 并向不存在的资源发出 GET 请求,我希望响应状态为 404 not found。但是,如果我使用 "nGET" 等不受支持的方法向同一个不存在的资源发出请求,那么我会收到状态为 501 的响应。这是否正确?我会假设如果资源不存在那么我会得到一个 404.
同样的问题也适用于 505,如果我向 Tomcat 发出一个请求,使用不支持的协议版本访问一个不存在的资源,我应该期待 404 还是 505?
我相信这两个 500 状态代码在某种意义上会优先于 404 未找到。我将 501 和 505 视为服务器在尝试以任何有意义的方式解决请求之前响应 HTTP 请求的性质。因为它实际上会在尝试查找请求的资源之前说 "I'm not answering that request method or HTTP version",所以我希望在收到 404.
之前发生这 500 个错误中的任何一个。
关于 400 class 响应代码的 HTTP 1.1 规范:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4
10.4 Client Error 4xx
The 4xx class of status code is intended for cases in which the client seems to have erred...
还有500个class响应码:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5
10.5 Server Error 5xx
Response status codes beginning with the digit "5" indicate cases in which the server is aware that it has erred or is incapable of performing the request
一个状态没有提到它优先于另一个,应该是你传达的最重要的状态码是什么。
尝试默认的 Apache 2.2 安装(没有 Tomcat)时,当我使用不受支持的方法请求缺少的资源时,似乎以 501 Method Not Implemented 响应响应,更多地指向服务器问题 - 会出现类似于 Apache+Tomcat 的行为方式。
相反,再次向 Amazon CloudFront 端点发出请求,同时缺少资源和不受支持的方法 returns 400 Bad Request 响应,表明它更倾向于传达客户端错误。
归根结底,对于您遇到不止一个问题的情况,您最好让客户同时解决这两个问题。只要您 return 在只有一个问题时给出一个正确的响应代码,尝试以特定顺序解决多个问题是一种品味问题。值得注意的是,400 class 和 500 class 定义都包含短语:
User agents SHOULD display any included entity to the user
您可以在您认为合适的响应正文中包含任何详细信息,这意味着您可以在存在多个问题的情况下包含文本来描述请求中的所有问题。
如果我有一个 tomcat 服务器 运行 并向不存在的资源发出 GET 请求,我希望响应状态为 404 not found。但是,如果我使用 "nGET" 等不受支持的方法向同一个不存在的资源发出请求,那么我会收到状态为 501 的响应。这是否正确?我会假设如果资源不存在那么我会得到一个 404.
同样的问题也适用于 505,如果我向 Tomcat 发出一个请求,使用不支持的协议版本访问一个不存在的资源,我应该期待 404 还是 505?
我相信这两个 500 状态代码在某种意义上会优先于 404 未找到。我将 501 和 505 视为服务器在尝试以任何有意义的方式解决请求之前响应 HTTP 请求的性质。因为它实际上会在尝试查找请求的资源之前说 "I'm not answering that request method or HTTP version",所以我希望在收到 404.
之前发生这 500 个错误中的任何一个。关于 400 class 响应代码的 HTTP 1.1 规范: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4
10.4 Client Error 4xx
The 4xx class of status code is intended for cases in which the client seems to have erred...
还有500个class响应码:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5
10.5 Server Error 5xx
Response status codes beginning with the digit "5" indicate cases in which the server is aware that it has erred or is incapable of performing the request
一个状态没有提到它优先于另一个,应该是你传达的最重要的状态码是什么。
尝试默认的 Apache 2.2 安装(没有 Tomcat)时,当我使用不受支持的方法请求缺少的资源时,似乎以 501 Method Not Implemented 响应响应,更多地指向服务器问题 - 会出现类似于 Apache+Tomcat 的行为方式。
相反,再次向 Amazon CloudFront 端点发出请求,同时缺少资源和不受支持的方法 returns 400 Bad Request 响应,表明它更倾向于传达客户端错误。
归根结底,对于您遇到不止一个问题的情况,您最好让客户同时解决这两个问题。只要您 return 在只有一个问题时给出一个正确的响应代码,尝试以特定顺序解决多个问题是一种品味问题。值得注意的是,400 class 和 500 class 定义都包含短语:
User agents SHOULD display any included entity to the user
您可以在您认为合适的响应正文中包含任何详细信息,这意味着您可以在存在多个问题的情况下包含文本来描述请求中的所有问题。