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

问题描述:

背景:假设我有一个显示Foos集合信息的网站。网址是:如果使用错误的方法并且我不知道资源是否存在,我应该使用404还是405进行响应?

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

我只对GET请求做出响应 - 您不能POST或PUT或DELETE Foo。检查某个ID是否对应真实的Foo是一项昂贵的操作,我想避免。

问题:如何响应POST请求到/foo/12345?理想的做法是检查这样的Foo是否存在。如果是这样,发送405(方法不允许)。如果没有,发送404(未找到)。但是检查Foo是否存在价格昂贵,而且我不想浪费那些甚至无法使用正确方法的白痴。

那么,我有两种选择:

  • 始终以404响应,即使有可能实际上是东西在那里。
  • 始终以405响应,即使可能没有任何内容,并且如果使用正确的方法重新发送请求,用户代理将迎接404。

哪个选项最符合HTTP标准?他们中的任何一个人是否都支持这个标准?

据我所知,关于HTTP规范本身并没有严格的规定。

但是我对这个个人的看法是,在决定什么样的反应给予的请求,检查请求类型的步骤应检查请求路径来之前(查看是否它甚至有) 。

考虑到在某些情况下,即使配置您的网络服务器(或负载平衡器),以阻止所有错误类型的请求方法,在请求甚至到达您的网络软件之前,也是合理的方法。这再次暗示我应该在路径之前检查请求方法。

然后添加到事实上,你说如果检查一个Foo甚至存在是一个昂贵的操作,似乎谨慎的确认,他们已经小心地发送正确的请求在第一位!

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