我有一个RESTful资源,其表示只能由经过身份验证的客户端检索。如果未经身份验证的客户端发出GET请求,将返回401。
另一方面,我希望未经身份验证的客户端能够确定资源是否存在。在这种情况下,我正在考虑如果资源确实存在,则HEAD请求返回200,否则返回404。
RFC 2616在第9.4节中说明了关于HEAD请求的以下内容响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同。
这种方法是否会被认为是适当的RESTful?
作为替代方案,我可以让GET和HEAD请求为不存在的资源返回404,如果请求存在但是客户端没有权限则返回401.
答案 0 :(得分:3)
我会去404/401路线。它更简单,更正交。还因为HEAD定义的第一行是:
HEAD方法与GET相同,只是服务器不能在响应中返回消息体。
这将为不支持HEAD的HTTP客户端留下空间。未经验证的他们可以简单地执行GET来确定资源的存在。不需要HEAD支持。
答案 1 :(得分:3)
如果您真的要允许未经身份验证的客户端确定资源的存在,我会选择后一个选项(404表示不存在,401表示未经身份验证)。如果暴露了该存在信息,则404/401是正确的响应:
另外,如果经过身份验证的客户端具有适当的访问权限并且存在,则允许经过身份验证的客户端为200的资源进行HEAD。