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 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 . Jedynym celem żądania jest pobranie danych z serwera.
Właściwości GET
- Bezpieczna: Żądania są uważane za . Oznacza to, że nie powinny powodować żadnych skutków ubocznych na serwerze. Złożenie żądania 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ń bez obawy o przypadkową modyfikację indeksowanych stron.
- Idempotentna: Żądania są . Wielokrotne wysłanie tego samego żądania 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 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 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 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 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 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: nie jest idempotentne. Wielokrotne wysłanie tego samego żądania 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 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 nie są buforowalne, chyba że odpowiedź zawiera jawne nagłówki buforowania (np.
Cache-ControllubExpires).
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 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 polega na tym, że jest kierowane na konkretny, znany adres URL, podczas gdy 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 , modyfikuje stan na serwerze.
- Idempotentna: To jest cecha definiująca . Wielokrotne wysłanie tego samego żądania 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 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: jest idempotentne. Pierwsze żądanie usunięcia
/uzytkownicy/123usunie 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ć za pierwszym razem i 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 ContentHEAD
Metoda prosi o odpowiedź identyczną z żądaniem , 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 .
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 GMTMetody 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 służy do opisywania opcji komunikacji dla zasobu docelowego. Klient może użyć , 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. lub ), najpierw wysyła żądanie (tzw. żądanie pre-flight), aby zapytać serwer o pozwolenie.
- PATCH
- Metoda służy do stosowania częściowych modyfikacji zasobu. Podczas gdy zastępuje cały zasób, dostarcza zestaw instrukcji, jak go zmienić. Na przykład, żądanie 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. 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 ustanawia tunel do serwera zidentyfikowanego przez zasób docelowy. Służy głównie do tworzenia bezpiecznego połączenia przez serwer proxy . 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 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: , , ,
Metody niebezpieczne: , , ,
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: , , , , ,
Metody nieidempotentne: , (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 ( i są idempotentne, ponieważ prowadzą do określonego stanu, ale nie są bezpieczne, ponieważ ten stan zmieniają).