假设我们有一个接受数字标识符的web服务。无效(非数字)标识符的HTTP状态代码通常是什么?
有效资源标识符
要求 :获取 http://service.co.uk/resources/123 回答 :200好
要求 :获取 http://service.co.uk/resources/123
回答 :200好
有效但未知的资源标识符
要求 :获取 http://service.co.uk/resources/456 回答 :404未找到
要求 :获取 http://service.co.uk/resources/456
回答 :404未找到
资源标识符无效
要求 :获取 http://service.co.uk/resources/abc 回答 :400错误请求
要求 :获取 http://service.co.uk/resources/abc
回答 :400错误请求
在标识符无效的情况下,404(未找到)准确描述了情况;我们未能找到资源。然而,400(错误请求)给出了未找到资源的原因的指示。
第2616页
10.4.1 400错误请求 由于格式错误,服务器无法理解该请求 语法。客户不应在没有 修改。 10.4.5 404未找到 服务器未找到与请求URI匹配的任何内容。不 指示该状况是暂时的还是 永久的如果服务器 通过一些内部可配置机制 资源永久不可用,并且没有转发地址。 此状态代码通常用于服务器不希望 确切地说明请求被拒绝的原因,或者没有其他请求被拒绝 响应是适用的。
10.4.1 400错误请求
由于格式错误,服务器无法理解该请求 语法。客户不应在没有 修改。
10.4.5 404未找到
服务器未找到与请求URI匹配的任何内容。不 指示该状况是暂时的还是 永久的如果服务器 通过一些内部可配置机制 资源永久不可用,并且没有转发地址。 此状态代码通常用于服务器不希望 确切地说明请求被拒绝的原因,或者没有其他请求被拒绝 响应是适用的。
该URL不是语法错误,而是语义错误。它具有正确的语法/结构,但所选的特定标识符没有任何意义。这使得 400 (Bad Request) 一个糟糕的候选人。如果是的话 /123/resources ,您可能会认为它在语法上不正确,但我打赌您的框架将以 404 对于任何未指定的路径。即使两者都适用,您也应该选择更具体的 404 错误这就是我见过的每一个框架所做的。
400 (Bad Request)
/123/resources
404
而且 RFC 2616 已过期。查看7230到7239以了解最新的迭代。
RFC 2616