这个想法是响应主体给您一个页面,该页面将您链接到该事物:
创建了201
状态码201(已创建)表示请求已得到满足,并导致创建了一个或多个新资源。由请求创建的主要资源由响应中的Location头字段标识,或者,如果未接收到Location字段,则由有效请求URI标识。
这意味着您将Location
在响应标头中包含一个,该标头提供了可以找到新创建的事物的URL :
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
反应体
然后,他们继续提及您应在响应正文中包含的内容:
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="https://stackoverflow.com/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,我可以将其与刚刚上传的内容一起存储:
有关201响应中验证头字段(例如ETag和Last-Modified)的含义和目的的讨论,请参见7.2节。
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="https://stackoverflow.com/a/36373586/12597">here</A> to view it.
和ETag
s纯粹是任意值。当资源更改(和缓存需要更新)时,让它们有所不同就很重要。ETag通常是一个哈希(例如SHA2)。但是它可以是数据库rowversion
,也可以是递增的修订号。当事物改变时,任何会改变的事物。