如果使用了错误的方法并且我不知道资源是否存在,我应该使用404还是405回复?

时间:2017-09-23 09:57:29

标签: http web-applications http-status-code-404 http-status-code-405

背景:假设我有一个显示有关Foos系列信息的网站。 URL:s位于表单上:

https://example.com/foo/{foo-id}

我只响应GET请求 - 你不能POST或PUT或DELETE一个Foo。检查某个ID是否与真正的Foo相对应是一项昂贵的操作,我想避免这种操作。

问题:如何回复/foo/12345的POST请求?理想的是检查是否存在这样的Foo。如果是,请发送405(方法不允许)。如果没有,请发送404(未找到)。但是检查Foo是否存在是昂贵的,而且我不想浪费精力在一些甚至不愿意使用正确方法的白痴身上。

那么我有两个选择:

  • 总是回复404,即使实际上可能存在某些内容。
  • 始终响应405,即使可能没有任何内容,如果使用正确的方法重新发送请求,用户代理将会收到404。

哪个选项最符合HTTP标准?它们中的任何一个都符合标准吗?

1 个答案:

答案 0 :(得分:1)

据我所知,就HTTP规范本身而言,没有严格的规则。

然而,我个人对此的看法是,在决定向请求提供何种响应的步骤中,在检查请求路径类型 >(看看它是否在那里)。

考虑到在某些情况下,甚至可以配置您的网络服务器(或负载均衡器)来简单地阻止所有错误类型的请求方法......在请求进入您的网络软件之前。这再次向我建议你应该在路径之前检查请求方法。

然后又补充说,你说检查 Foo 是否存在是一项昂贵的操作,看起来很谨慎,确认他们已经小心翼翼地发送了正确的请求首先!

所以是的,在这种情况下我总是会返回405.