这个想法是,响应体会给你一个页面,页面上有一个链接指向这个东西:
201 Created
状态码
201
(已创建) 表示请求已被满足,并且已创建了一个或多个新资源。请求创建的主要资源由响应中的
Location
头字段标识,如果没有收到
Location
字段,则由有效的请求 URI 标识。
这意味着你需要在响应的头部包含一个
Location
,它给出了新创建的东西的 URL。
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: https://dev59.com/SHI-5IYBdhLWcg3wbXtN
响应体
然后他们继续提到响应体中应该包含的内容:
201
响应负载通常描述并链接到已创建的资源。
对于使用浏览器的用户,您可以提供一个他们可以查看和点击的内容,以便访问他们新创建的资源:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: https://dev59.com/SHI-5IYBdhLWcg3wbXtN
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: https://dev59.com/SHI-5IYBdhLWcg3wbXtN#36373586
Content-Type: application/xml
<createdResources>
<questionID>1860645</questionID>
<answerID>36373586</answerID>
<primary>/a/36373586/12597</primary>
<additional>
<resource>https://dev59.com/SHI-5IYBdhLWcg3wbXtN#36373586</resource>
<resource>https://dev59.com/SHI-5IYBdhLWcg3wbXtN#1962757</resource>
</additional>
</createdResource>
或者,如果你喜欢的话:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: https:
Content-Type: application/json
{
"questionID": 1860645,
"answerID": 36373586,
"primary": "/a/36373586/12597",
"additional": [
"https://dev59.com/SHI-5IYBdhLWcg3wbXtN#36373586",
"https://dev59.com/SHI-5IYBdhLWcg3wbXtN#36373586"
]
}
对于这个问题的回答完全取决于你,你可以随意选择。
缓存友好
最后,我可以对已创建的资源进行预缓存优化(因为我已经拥有了内容;我只是上传了它)。服务器可以返回一个日期或ETag
,我可以将其与刚刚上传的内容一起存储:
请参阅第7.2节,了解验证器头字段(如ETag
和Last-Modified
)在201
响应中的含义和目的。
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: https://dev59.com/SHI-5IYBdhLWcg3wbXtN
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
,或者是递增的修订号。任何在
事物发生变化时会
改变的东西。