在201 Created响应中,Location标头是否可以用于多个资源位置?

14

正确的动词和响应应该是什么,以接受批量PUT创建并返回多个位置?Location头似乎只支持一个单一的Uri。

我最初认为可以使用PUT进行批量创建,并返回包含Uri列表的字符串数组,但在查看规范时,似乎不支持这种方法,但也不是完全清楚。

多个Location头是否可行作为替代方法?

有什么建议吗?

3个回答

10

不可以,你只能有一个Location头字段(从规范中可以清楚地看出)。

话虽如此,PUT方法用于创建/更新单个资源。看起来你正在为它设计之外的东西使用它...


谢谢你澄清了这个问题。所以我们应该使用POST来进行批量创建吗? - Rebecca
3
是的,但问题仍然存在:在批量创建情况下,如何返回所有单个资源位置?一种冗长的方法是:将这些资源位置编译成它们自己的资源,并返回一个URL到那个资源,但正如我所说,这有点冗长。 - StarTrekRedneck

5

根据规范,PUT方法只能创建一个资源:

PUT方法请求使用请求消息有效载荷中的表示定义的状态来创建或替换目标资源的状态。

(https://www.rfc-editor.org/rfc/rfc7231#section-4.3.4)

然而,使用不同动词(例如POST)的请求可以创建多个资源并返回201 Created状态。根据规范:
主要由请求创建的资源是通过响应中的Location头字段标识,或者如果未收到Location字段,则通过有效的请求URI标识。201响应有效载荷通常描述并链接到创建的资源。

(https://www.rfc-editor.org/rfc/rfc7231#section-6.3.2)

因此,在对例如POST请求的多个已创建资源返回201响应时,返回多个URI是可以的,但Location标头只能包含一个URI。


1
是的,但你引用了一个过时的文档。 - Julian Reschke
谢谢。现在已经修复了(希望如此)。 - Florian Winter

0

RFC 5988介绍了Link HTTP头。它可以用于此目的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接