暂时忽略 3xx 响应,我想知道为什么 HTTP 位置标头仅与 POST 请求/201(已创建)响应一起使用。
来自RFC 2616 规范:
对于 201(已创建)响应,位置是请求创建的新资源的位置。
这是一种广泛支持的行为,但为什么不应该将它与其他 HTTP 方法一起使用呢?以JSON API 规范为例:
它为 JSON 有效负载中的当前资源定义了一个自引用链接(对于 RESTful API 来说并不少见)。此链接包含在每个有效负载中。规范说,如果您通过 POST 创建新文档并且该值与有效负载中的自引用链接相同,则必须包含 HTTP 位置标头,但这仅在 POST 中需要。如果您可以只使用 HTTP 位置标头,为什么还要为自引用链接使用自定义格式?
注意:这并不特定于 JSON API。HAL、JSON Hyper-Schema或其他标准也是如此。
注意 2:它甚至不是特定于 HTTP 位置标头,因为它与 HTTP 链接标头相同。如您所见,JSON API、HAL 和 JSON Hyper-Schema 不仅定义了自引用链接的约定,还表达了有关资源的相关信息或资源的可能操作。但似乎他们都可以只使用 HTTP 链接头。(如果他们不想使用 HTTP 位置标头,他们甚至可以将自引用链接放入 HTTP 链接标头。)
我不想咆哮,这似乎是某种“重新发明轮子”。它似乎也非常有限:如果您只使用 HTTP 位置/链接标头,那么您是否在 HTTP 接受标头中要求 JSON、XML 或任何内容都没有关系,您将获得有关您的资源的有用元信息一个 HEAD 请求,如果您使用 JSON API、HAL 或 JSON Hyper-Schema,它将不包含链接。