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.
Wynik 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.