Chodzi o to, że treść odpowiedzi podaje stronę, która prowadzi do danej rzeczy:
201 Utworzono
Kod stanu 201 (Utworzono) wskazuje, że żądanie zostało spełnione i spowodowało utworzenie co najmniej jednego nowego zasobu. Podstawowy zasób utworzony przez żądanie jest identyfikowany przez pole nagłówka lokalizacji w odpowiedzi lub, jeśli nie otrzymano pola lokalizacji, przez efektywny identyfikator URI żądania.
Oznacza to, że Location
w nagłówku odpowiedzi umieścisz a, który zawiera adres URL miejsca, w którym możesz znaleźć nowo utworzoną rzecz :
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Treść odpowiedzi
Następnie wspominają, co należy zawrzeć w treści odpowiedzi :
Ładunek odpowiedzi 201 zwykle opisuje i łączy do utworzonych zasobów.
Człowiek korzystający z przeglądarki daje mu coś, na co może spojrzeć i kliknąć, aby dostać się do nowo utworzonego zasobu:
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.
Jeśli strona będzie używana tylko przez robota, sensowne jest, aby odpowiedź była czytelna dla komputera:
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>
Lub, jeśli wolisz:
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"
]
}
Odpowiedź zależy wyłącznie od Ciebie; to arbitralnie to, co chcesz.
Przyjazny dla pamięci podręcznej
Wreszcie jest optymalizacja, dzięki której mogę wstępnie buforować utworzony zasób (ponieważ mam już zawartość; właśnie ją przesłałem). Serwer może zwrócić datę lub ETag, które mogę przechowywać z treścią, którą właśnie załadowałem:
W sekcji 7.2 omówiono znaczenie i cel pól nagłówka walidatora, takich jak ETag i Last-Modified w odpowiedzi 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.
A ETag
są to wartości czysto arbitralne. Ważne jest, aby były inne, gdy zmieniają się zasoby (i pamięci podręczne wymagają aktualizacji). ETag jest zwykle hashem (np. SHA2). Ale może to być baza danych rowversion
lub rosnący numer wersji. Wszystko, co zmieni się, gdy coś się zmieni.