如果我运行tomcat服务器并向不存在的资源发出GET请求,我希望找不到404的响应状态。但是,如果我使用不支持的方法向同一个非现有资源发出请求,例如" nGET"然后我收到状态为501的回复。这是正确的吗?我会假设如果资源不存在那么我会得到404。
同样的问题适用于505,如果我向Tomcat请求不支持的协议版本到非现有资源,我应该期待404还是505?
答案 0 :(得分:2)
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类定义都包含短语:
用户代理应该向用户显示任何包含的实体
您可以在您认为合适的答案正文中包含任何详细信息,如果存在多个问题,则表示您可以包含文字来描述请求的所有问题。
答案 1 :(得分:1)
我认为这两个500状态代码在某种意义上优先于404未找到。我看501和505作为服务器响应HTTP请求的性质,然后它以任何有意义的方式尝试解析请求。因为它实际上会说"我没有回答那个请求方法或HTTP版本"在它试图找到所请求的资源之前,我预计在收到404之前会发生这500个错误。