我有一个 RESTful 资源,其表示只能由经过身份验证的客户端检索。在未经身份验证的客户端发出 GET 请求的情况下,将返回 401。
另一方面,我希望未经身份验证的客户端能够确定资源是否存在。在这种情况下,我正在考虑让 HEAD 请求在资源确实存在时返回 200,如果不存在则返回 404。
RFC 2616 在第 9.4 节中说明了以下关于 HEAD 请求的内容
The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request.
这种方法是否适合 RESTful?
作为替代方案,我可以让 GET 和 HEAD 请求为不存在的资源返回 404,如果请求存在但客户端无权返回 401。
最佳答案
我会走 404/401 路线。它更简单,更正交。也因为 HEAD 定义的第一行是:
The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response.
这将为不支持 HEAD 的 HTTP 客户端留出空间。未经身份验证,他们可以简单地执行 GET 以确定资源的存在。无需 HEAD 支持。
关于http - 使用 HEAD 请求揭示 protected 资源的存在是否是 RESTful?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15643684/