Идея состоит в том, что тело ответа дает вам страницу, которая связывает вас с этим:
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, которые я могу сохранить вместе с только что загруженным мной контентом:
См. Раздел 7.2 для обсуждения значения и назначения полей заголовка валидатора, таких как ETag и 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="https://stackoverflow.com/a/36373586/12597">here</A> to view it.
И ETag
s - чисто произвольные значения. Главное, чтобы они были разными при изменении ресурса (и необходимости обновления кешей). ETag обычно представляет собой хэш (например, SHA2). Но это может быть база данных rowversion
или увеличивающийся номер ревизии. Все, что изменится, когда что- то изменится.