如果使用了错误的方法并且我不知道资源是不是存在,我应该回复 404 还是 405?
Posted
技术标签:
【中文标题】如果使用了错误的方法并且我不知道资源是不是存在,我应该回复 404 还是 405?【英文标题】:Should I respond with 404 or 405 if the wrong method is used and I don't know if the resource exists?如果使用了错误的方法并且我不知道资源是否存在,我应该回复 404 还是 405? 【发布时间】:2018-03-04 20:04:46 【问题描述】:背景:假设我有一个网站,显示有关 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】:据我所知,就 HTTP 规范本身而言,对此没有严格的规定。
但是我个人对此的看法是,在决定对请求给出什么样的响应的步骤中,检查请求类型应该在检查请求之前进行路径(看看它是否在那里)。
考虑到在某些情况下,甚至将您的网络服务器(或负载平衡器)配置为简单地阻止所有错误类型的请求方法......在请求甚至到达您的网络软件之前,这将是一种合理的方法。这再次向我建议您应该在路径之前检查请求方法。
然后再加上你说检查 Foo 是否存在是一项昂贵的操作这一事实,确认他们已经小心发送正确的请求似乎是谨慎的首先!
所以是的,在这种情况下,我总是会返回 405。
【讨论】:
以上是关于如果使用了错误的方法并且我不知道资源是不是存在,我应该回复 404 还是 405?的主要内容,如果未能解决你的问题,请参考以下文章