背景:假设我有一个显示有关Foos系列信息的网站。 URL:s位于表单上:
https://example.com/foo/{foo-id}
我只响应GET请求 - 你不能POST或PUT或DELETE一个Foo。检查某个ID是否与真正的Foo相对应是一项昂贵的操作,我想避免这种操作。
问题:如何回复/foo/12345
的POST请求?理想的是检查是否存在这样的Foo。如果是,请发送405(方法不允许)。如果没有,请发送404(未找到)。但是检查Foo是否存在是昂贵的,而且我不想浪费精力在一些甚至不愿意使用正确方法的白痴身上。
那么我有两个选择:
哪个选项最符合HTTP标准?它们中的任何一个都符合标准吗?
答案 0 :(得分:1)
据我所知,就HTTP规范本身而言,没有严格的规则。
然而,我个人对此的看法是,在决定向请求提供何种响应的步骤中,在检查请求路径类型 >(看看它是否在那里)。
考虑到在某些情况下,甚至可以配置您的网络服务器(或负载均衡器)来简单地阻止所有错误类型的请求方法......在请求进入您的网络软件之前。这再次向我建议你应该在路径之前检查请求方法。
然后又补充说,你说检查 Foo 是否存在是一项昂贵的操作,看起来很谨慎,确认他们已经小心翼翼地发送了正确的请求首先!
所以是的,在这种情况下我总是会返回405.