这个想法是响应正文为您提供一个链接您到该事物的页面:
201 创建
201(已创建)状态代码表示请求已完成,并导致创建了一个或多个新资源。请求创建的主要资源由响应中的 Location 标头字段标识,如果未收到 Location 字段,则由有效请求 URI 标识。
这意味着您将在响应header中包含一个Location,它提供了您可以找到新创建的事物的URL >:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
响应正文
他们接着提到你应该在回复中包含什么body:
201 响应负载通常描述并链接到创建的资源。
对于使用浏览器的人,您可以为他们提供可以查看的内容,然后单击以访问他们新创建的资源:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: text/html
Your answer has been saved!
Click <A href="/a/36373586/12597">here</A> to view it.
如果该页面仅由机器人使用,则将响应设置为计算机可读是有意义的:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: application/xml
<createdResources>
<questionID>1860645</questionID>
<answerID>36373586</answerID>
<primary>/a/36373586/12597</primary>
<additional>
<resource>http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content/36373586#36373586</resource>
<resource>http://stackoverflow.com/a/1962757/12597</resource>
</additional>
</createdResource>
或者,如果您愿意:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: application/json
{
"questionID": 1860645,
"answerID": 36373586,
"primary": "/a/36373586/12597",
"additional": [
"http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content/36373586#36373586",
"http://stackoverflow.com/a/36373586/12597"
]
}
回复完全取决于您;随心所欲。
缓存友好
最后还有一个优化,我可以预先缓存创建的资源(因为我已经有了内容;我刚刚上传了它)。服务器可以返回一个日期或 ETag,我可以将其与我刚刚上传的内容一起存储:
请参阅Section 7.2,了解201 响应中验证器标头字段(例如ETag 和Last-Modified)的含义和用途。
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/23704283/12597
Content-Type: text/html
ETag: JF2CA53BOMQGU5LTOQQGC3RAMV4GC3LQNRSS4
Last-Modified: Sat, 02 Apr 2016 12:22:39 GMT
Your answer has been saved!
Click <A href="/a/36373586/12597">here</A> to view it.
而 ETag 是纯粹的任意值。当资源发生变化(并且缓存需要更新)时,让它们有所不同是最重要的。 ETag 通常是一个散列(例如 SHA2-256)。但它可以是数据库rowversion,或递增的修订号。当事物改变时,任何会改变的东西。