Metody HTTP

GET, POST, PUT, DELETE i inne metody żądań HTTP oraz ich zastosowanie.

Czym są Metody HTTP? Czasowniki Sieci Web

Protokół Transferu Hipertekstu (HTTP) to ustrukturyzowany język, którego używają przeglądarki internetowe (klienci) i serwery WWW do komunikacji. W sercu tego języka leżą . Można o nich myśleć jak o czasownikach akcji w żądaniu. Informują one serwer, co klient chce zrobić z określonym zasobem, niezależnie od tego, czy jest to strona internetowa, obraz, wideo, czy dane z bazy danych.

Kiedy przeglądarka wysyła żądanie do serwera, pierwszą informacją w tym żądaniu jest właśnie metoda. Ustawia ona kontekst dla całej komunikacji. Na przykład, prośba o proste dostarczenie strony internetowej jest fundamentalnie inną akcją niż prośba o zapisanie nowego zdjęcia profilowego użytkownika. Używanie różnych metod do różnych działań pozwala serwerom na natychmiastowe zrozumienie intencji klienta i wydajne oraz bezpieczne przetworzenie żądania. Ten system metod jest kamieniem węgielnym nowoczesnej sieci i ma kluczowe znaczenie w projektowaniu interfejsów API RESTful, które stanowią trzon większości dzisiejszych usług internetowych. W tym przewodniku przyjrzymy się najczęściej używanym metodom, ich konkretnym celom i definiującym je cechom.

Metody Podstawowe: Siła Napędowa Sieci

Chociaż istnieje wiele metod HTTP, niewielka ich część odpowiada za zdecydowaną większość interakcji w internecie. Zrozumienie tych podstawowych metod jest niezbędne do pojęcia, jak funkcjonuje sieć.

GET

Metoda GETGET jest używana do żądania reprezentacji określonego zasobu. Jest to najpowszechniejsza metoda w sieci. Za każdym razem, gdy wpisujesz adres URL w przeglądarce, klikasz hiperłącze lub gdy strona internetowa ładuje swoje obrazy i arkusze stylów, wysyłane są żądania GETGET. Jedynym celem żądania GETGET jest pobranie danych z serwera.

Właściwości GET

  • Bezpieczna: Żądania GETGET są uważane za . Oznacza to, że nie powinny powodować żadnych skutków ubocznych na serwerze. Złożenie żądania GETGET nie powinno zmieniać żadnych danych, tworzyć nowych danych ani wywoływać żadnych istotnych działań. Wyszukiwarka internetowa może przeszukiwać sieć i wysyłać miliardy żądań GETGET bez obawy o przypadkową modyfikację indeksowanych stron.
  • Idempotentna: Żądania GETGET. Wielokrotne wysłanie tego samego żądania GETGET powinno mieć taki sam skutek. Pięciokrotne zażądanie strony głównej portalu informacyjnego spowoduje, że za każdym razem otrzymasz tę samą stronę (pomijając dynamiczne aktualizacje treści), a stan serwera nie ulegnie zmianie w wyniku każdego żądania.
  • Dane w URL: Wszelkie dane wysyłane z żądaniem GETGET muszą być zakodowane w samym adresie URL, zazwyczaj w ciągu zapytania (np. /szukaj?q=http). Powoduje to, że dane te są widoczne w logach serwera, historii przeglądarki i narzędziach do monitorowania sieci, co sprawia, że GETGET nie nadaje się do przesyłania poufnych informacji, takich jak hasła. Nakłada to również praktyczny limit na ilość danych, które można wysłać, ponieważ adresy URL mają ograniczenia długości.
  • Możliwość buforowania (Cacheable): Ponieważ żądania GETGET są bezpieczne i idempotentne, ich odpowiedzi mogą być buforowane przez przeglądarki, serwery proxy i sieci CDN (Content Delivery Networks). Poprawia to wydajność, pozwalając na obsługę kolejnych żądań tego samego zasobu z lokalnej pamięci podręcznej, zamiast ponownego odwołania się do serwera źródłowego.

Przykładowy Scenariusz

Przeglądarka żąda strony profilowej użytkownika.

-- Żądanie --
GET /uzytkownicy/profil/123 HTTP/1.1
Host: api.example.com
Accept: application/json
-- Odpowiedź --
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 104

{
"userId": 123,
"username": "JanKowalski",
"email": "[email protected]"
}

POST

Metoda POSTPOST służy do przesłania jednostki do określonego zasobu, co często powoduje zmianę stanu lub skutki uboczne na serwerze. Najczęściej jest używana do tworzenia nowego zasobu podrzędnego wobec innego zasobu. Na przykład przesłanie komentarza do wpisu na blogu tworzy nowy zasób komentarza w ramach tego konkretnego wpisu.

Właściwości POST

  • Niebezpieczna: Żądanie POSTPOST nie jest bezpieczne, ponieważ jego głównym celem jest tworzenie lub modyfikowanie danych na serwerze. Przesłanie nowego formularza rejestracyjnego zmieni bazę danych serwera.
  • Nieidempotentna: POSTPOST nie jest idempotentne. Wielokrotne wysłanie tego samego żądania POSTPOST spowoduje utworzenie wielu nowych zasobów. Jeśli przypadkowo klikniesz przycisk "Złóż zamówienie" dwa razy, prawdopodobnie utworzysz dwa oddzielne zamówienia. Dlatego przeglądarki ostrzegają przed ponownym przesłaniem danych formularza.
  • Dane w ciele (Body): Dane przesyłane w żądaniu POSTPOST są przenoszone w ciele komunikatu. Pozwala to na ukrycie ich przed adresem URL, co czyni je bezpieczniejszymi dla poufnych informacji. Pozwala również na wysyłanie dużych ilości danych, takich jak przesyłane pliki.
  • Brak możliwości buforowania: Generalnie odpowiedzi na żądania POSTPOST nie są buforowalne, chyba że odpowiedź zawiera jawne nagłówki buforowania (np. Cache-Control lub Expires).

Przykładowy Scenariusz

Użytkownik zakłada nowe konto.

-- Żądanie --
POST /uzytkownicy HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 56

{
"username": "AnnaNowak",
"password": "supersecret"
}
-- Odpowiedź --
HTTP/1.1 201 Created
Location: /uzytkownicy/456

{
"userId": 456,
"message": "Użytkownik utworzony pomyślnie"
}

PUT

Metoda PUTPUT służy do zastąpienia całej reprezentacji docelowego zasobu ładunkiem żądania. Jeśli zasób docelowy nie istnieje, serwer może go utworzyć. Kluczowa różnica w stosunku do POSTPOST polega na tym, że PUTPUT jest kierowane na konkretny, znany adres URL, podczas gdy POSTPOST wysyła dane na adres URL, który je przetwarza (np. /uzytkownicy), a serwer decyduje o adresie URL nowego zasobu.

Właściwości PUT

  • Niebezpieczna: Podobnie jak POSTPOST, PUTPUT modyfikuje stan na serwerze.
  • Idempotentna: To jest cecha definiująca PUTPUT. Wielokrotne wysłanie tego samego żądania PUTPUT będzie miało dokładnie taki sam skutek, jak wysłanie go raz. Jeśli wyślesz żądanie aktualizacji imienia użytkownika na "Janina Kowalska", pierwsze żądanie je zmieni. Drugie, trzecie i czwarte żądanie po prostu ponownie ustawią imię na "Janina Kowalska", co daje ten sam stan końcowy na serwerze.
  • Dane w ciele (Body): Ładunek, który reprezentuje kompletnie zaktualizowany zasób, jest przesyłany w ciele wiadomości.

Przykładowy Scenariusz

Aktualizacja adresu email użytkownika.

-- Żądanie --
PUT /uzytkownicy/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
"username": "JanKowalski",
"email": "[email protected]"
}
-- Odpowiedź --
HTTP/1.1 200 OK

{
"userId": 123,
"username": "JanKowalski",
"email": "[email protected]"
}

DELETE

Metoda DELETEDELETE służy do usuwania określonego zasobu z serwera. Jest to prosta, ale potężna operacja.

Właściwości DELETE

  • Niebezpieczna: Oczywiście nie jest bezpieczna, ponieważ trwale usuwa dane z serwera.
  • Idempotentna: DELETEDELETE jest idempotentne. Pierwsze żądanie usunięcia /uzytkownicy/123 usunie użytkownika. Drugie żądanie usunięcia tego samego zasobu doprowadzi do tego samego stanu: użytkownik o ID 123 nie istnieje. Serwer może odpowiedzieć 204NoContent204 No Content za pierwszym razem i 404NotFound404 Not Found za drugim, ale stan końcowy samego zasobu jest identyczny (już go nie ma).

Przykładowy Scenariusz

Usuwanie konta użytkownika.

-- Żądanie --
DELETE /uzytkownicy/123 HTTP/1.1
Host: api.example.com
-- Odpowiedź --
HTTP/1.1 204 No Content

HEAD

Metoda HEADHEAD prosi o odpowiedź identyczną z żądaniem GETGET, ale bez ciała odpowiedzi. Jest to niezwykle przydatne do sprawdzania metadanych zasobu, takich jak jego nagłówki Content-Type, Content-Length czy Last-Modified, bez konieczności pobierania całego pliku.

Właściwości HEAD

  • Bezpieczna: Tak, nie zmienia stanu serwera.
  • Idempotentna: Tak, z tych samych powodów co GETGET.

Przykładowy Scenariusz

Sprawdzenie rozmiaru dużego pliku przed podjęciem decyzji o jego pobraniu.

-- Żądanie --
HEAD /pobieranie/duzy-plik.zip HTTP/1.1
Host: storage.example.com
-- Odpowiedź --
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Length: 104857600
Last-Modified: Fri, 15 Jun 2025 10:00:00 GMT

Metody Dodatkowe: Specjalistyczne Narzędzia

Poza metodami podstawowymi, HTTP definiuje kilka innych o bardziej wyspecjalizowanych celach, często używanych w tworzeniu API lub do diagnostyki sieci.

OPTIONS
Metoda OPTIONSOPTIONS służy do opisywania opcji komunikacji dla zasobu docelowego. Klient może użyć OPTIONSOPTIONS, aby dowiedzieć się, które metody HTTP serwer obsługuje dla określonego adresu URL. Jest to kluczowy element mechanizmu (Cross-Origin Resource Sharing). Zanim przeglądarka wyśle złożone żądanie do innej domeny (np. PUTPUT lub DELETEDELETE), najpierw wysyła żądanie OPTIONSOPTIONS (tzw. żądanie pre-flight), aby zapytać serwer o pozwolenie.
PATCH
Metoda PATCHPATCH służy do stosowania częściowych modyfikacji zasobu. Podczas gdy PUTPUT zastępuje cały zasób, PATCHPATCH dostarcza zestaw instrukcji, jak go zmienić. Na przykład, żądanie PATCHPATCH może zawierać tylko instrukcję zmiany adresu e-mail użytkownika, pozostawiając nazwę użytkownika i inne pola nietknięte. Może to być bardziej wydajne niż przesyłanie całej reprezentacji zasobu. PATCHPATCH nie jest bezpieczne i, co ważne, niekoniecznie jest idempotentne. Na przykład, instrukcja patch "dodaj 10 do wyniku użytkownika" dałaby inny wynik, gdyby została wysłana dwukrotnie.
CONNECT
Metoda CONNECTCONNECT ustanawia tunel do serwera zidentyfikowanego przez zasób docelowy. Służy głównie do tworzenia bezpiecznego połączenia HTTPSHTTPS przez serwer proxy HTTPHTTP. Klient prosi proxy o nawiązanie połączenia TCP z serwerem docelowym, a po jego ustanowieniu proxy po prostu przekazuje dane w obie strony bez inspekcji zaszyfrowanego ruchu.
TRACE
Metoda TRACETRACE wykonuje test pętli zwrotnej wiadomości wzdłuż ścieżki do zasobu docelowego. Pozwala klientowi zobaczyć, jakie (jeśli w ogóle) zmiany lub dodatki zostały wprowadzone przez serwery pośredniczące (np. proxy) do komunikatu żądania. Jest to narzędzie do debugowania i diagnostyki. Ze względu na potencjalne ryzyka bezpieczeństwa (Cross-Site Tracing), jest często wyłączana na produkcyjnych serwerach internetowych.

Zrozumienie Różnicy: Metody Bezpieczne a Idempotentne

Dwie najważniejsze, ale często mylone właściwości metod HTTP to bezpieczeństwo i idempotencja. Wyjaśnijmy tę różnicę.

Bezpieczeństwo (Safety)

Metoda jest bezpieczna, jeśli jest przeznaczona do operacji tylko do odczytu. Kiedy klient składa bezpieczne żądanie, nie oczekuje żadnej zmiany w stanie zasobu na serwerze. To jakbyś pytał bibliotekarza o spis treści książki; twoje pytanie nie zmienia samej książki.

Metody bezpieczne: GETGET, HEADHEAD, OPTIONSOPTIONS, TRACETRACE

Metody niebezpieczne: POSTPOST, PUTPUT, DELETEDELETE, PATCHPATCH

Idempotencja (Idempotency)

Metoda jest idempotentna, jeśli wielokrotne wysłanie identycznego żądania ma taki sam wpływ na serwer, jak wysłanie go tylko raz. Wynik na serwerze musi być taki sam po pierwszym i po N-tym żądaniu. To tak, jak ustawienie głośności w telewizorze na 15. Pierwszy raz głośność się zmienia. Jeśli zrobisz to ponownie, głośność pozostanie na poziomie 15. Stan końcowy jest ten sam.

Metody idempotentne: GETGET, HEADHEAD, PUTPUT, DELETEDELETE, OPTIONSOPTIONS, TRACETRACE

Metody nieidempotentne: POSTPOST, PATCHPATCH (generalnie)

Kluczowa różnica: Bezpieczeństwo dotyczy niezmieniania rzeczy (odczyt), podczas gdy idempotencja dotyczy zapewnienia tego samego stanu końcowego przy powtórzeniu (zapisz raz). Wszystkie metody bezpieczne są z definicji również idempotentne, ale nie wszystkie metody idempotentne są bezpieczne (PUTPUT i DELETEDELETE są idempotentne, ponieważ prowadzą do określonego stanu, ale nie są bezpieczne, ponieważ ten stan zmieniają).

    Metody HTTP | Teleinf Edu