这个想法是响应正文为您提供了一个将您链接到该事物的页面:
201 已创建
( 201
Created) 状态码表示请求已完成,并导致创建一个或多个新资源。请求创建的主要资源由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="/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
我可以将其与我刚刚上传的内容一起存储:
请参阅第 7.2 节,了解响应中验证器标头字段的含义和用途,例如ETag
and 。Last-Modified
201
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
s 是纯粹的任意值。当资源发生变化(并且缓存需要更新)时,让它们有所不同是最重要的。通常ETag
是散列(例如 SHA2-256)。但它可以是一个数据库rowversion
,也可以是一个递增的修订号。当事情发生变化时,任何事情都会发生变化。