Metoda POST

Metoda POST

Ta metoda służy do przesyłania żądań wykonania jakiejś akcji w stosunku do konkretnego zasobu (identyfikowanego przez adres URL). Razem z żądaniem transmitowany jest obiekt w ustalonej reprezentacji. Może ona być zastosowana do:

  • przesyłania szczegółowych danych obiektu do serwera (np. uzupełnionych za pośrednictwem formularza),
  • wysłania do serwera akcji, które mają wpływ na zachowanie danych (np. wysłanie wiadomości na grupę dyskusyjną),
  • stworzenia nowego zasobu określonego przez adres,
  • dodania lub zmiany danych dla zdefiniowanego zasobu.

POSTWynik operacji POST jest sygnalizowany za pomocą statusu, który jest zwracany w odpowiedzi serwera, np. 200 (OK), 201 (Created) lub 304 (Not Modified). Z każdym kodem statusu związane są dodatkowe informacje przenoszone w zdefiniowanych nagłówkach, np. dla odpowiedzi 201 (Created), nagłówek Location powinien zawierać adres nowo utworzonego zasobu. Szerzej w części opisującej statusy odpowiedzi.

Request
POST /foo/bar HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded 

action=addentry&subject=Hello
Response
HTTP/1.1 201 
CreatedDate: …
Content-Length: 0
Location: http://example.com/foo/bar

Operacja POST może być cache’owana tylko, gdy jawnie zostaną ustawione nagłówki odpowiadające za ten mechanizm.

Metoda POST w sposobie działania (nie w swoich zastosowaniach) przypomina metodę GET. Przykład zastosowania mechanizmów POST i GET w tym samym celu – do wysłania zawartości formatki HTML do serwera – może pokazać nam różnice w sposobie tworzenia zapytań w obu metodach.

<form action="http://example.com" method="GET/POST">
   User: <input name="user" type="text" /> 
   Password: <input name="password" type="password" /> 
   <input name="extra" type="hidden" value="value" /> 
   <input type="submit" />
</form>

Kliknięcie przycisku “Wyślij” spowoduje stworzenie następującego zapytania HTTP, zależnie od rodzaju zdefiniowanej metody:

GET
GET /?username=john&password=secret&extra=value HTTP/1.1
 Host: example.com
 Connection: keep-alive
 Accept: application/html
 User-Agent: Mozilla/5.0
POST
POST / HTTP/1.1
 Host: example.com
 Connection: keep-alive
 Content-Length: 49
 Content-Type: application/x-www-form-urlencoded
 Accept: application/html
 User-Agent: Mozilla/5.0

username=john&password=secret&extra=value

Główną różnicę pomiędzy tymi metodami zauważamy w sposobie przekazywania parametrów zapytań. Dla zapytania GET są one zawarte w adresie docelowym (jest to tak zwany Query String), zaś dla zapytania POST wysyłane są one w treści wiadomości w zdefiniowanym (poprzez Content-Type) formacie.