GET

Metoda HTTP

Specyfikacja metody HTTP GET

Metoda GET żąda przesłania aktualnie wybranej reprezentacji dla zasobu docelowego. GET jest podstawowym mechanizmem pobierania informacji i celem prawie wszystkich optymalizacji wydajności. W związku z tym, gdy ludzie mówią o pobieraniu pewnych identyfikowalnych informacji za pośrednictwem protokołu HTTP, zazwyczaj odnoszą się do żądania GET.

Kuszące jest myślenie o identyfikatorach zasobów jako o zdalnych nazwach ścieżek systemu plików, a o reprezentacjach jako o kopiach zawartości takich plików. W rzeczywistości w ten sposób zaimplementowano wiele zasobów (patrz sekcja 9.1 dotycząca powiązanych kwestii bezpieczeństwa). Jednak w praktyce nie ma takich ograniczeń. Interfejs HTTP dla zasobu może być równie dobrze zaimplementowany jako drzewo obiektów zawartości, programowy widok różnych rekordów bazy danych lub brama do innych systemów informacyjnych. Nawet jeśli mechanizm mapowania URI jest powiązany z systemem plików, serwer źródłowy może być skonfigurowany do wykonywania plików z żądaniem jako danymi wejściowymi i wysyłania danych wyjściowych jako reprezentacji, zamiast bezpośredniego przesyłania plików. Niezależnie od tego, tylko serwer źródłowy musi wiedzieć, w jaki sposób każdy z jego identyfikatorów zasobów odpowiada implementacji i w jaki sposób każda implementacja zarządza wybieraniem i wysyłaniem bieżącej reprezentacji zasobu docelowego w odpowiedzi na GET.

Klient może zmienić semantykę GET na "żądanie zakresu", żądając przesłania tylko części wybranej reprezentacji, wysyłając pole nagłówka zakresu w żądaniu (RFC7233).

Ładunek w komunikacie żądania GET nie ma zdefiniowanej semantyki; wysłanie treści ładunku w żądaniu GET może spowodować odrzucenie żądania przez niektóre istniejące implementacje.

Odpowiedź na żądanie GET może być przechowywana w pamięci podręcznej; pamięć podręczna MOŻE użyć jej do zaspokojenia kolejnych żądań GET i HEAD, chyba że pole nagłówka Cache-Control wskazuje inaczej (sekcja 5.2 RFC7234).

Metoda HTTP GET została określona w sekcji 4.3.1 dokumentu RFC 7231 przez Internet Engineering Task Force (IETF) i World Wide Web Consortium (W3C).

Opis metody GET

Metoda GET protokołu HTTP można porównać do cyfrowego bibliotekarza. Grzecznie prosi serwer o przedstawienie danych, nie wprowadzając żadnych zmian w samych danych - to czyste, pasywne żądanie.

Co czyni metodę GET wyjątkową?

  1. Spójność: Wyobraź sobie, że pytasz bibliotekarza o tę samą książkę wiele razy - za każdym razem dostaniesz tę samą książkę. To samo dotyczy żądania GET: zawsze dostarcza ten sam wynik.
  2. Czytaj, nie pisz: Żądanie GET ma charakter obserwatora. Patrzy na dane, ale ich nie zmienia.
  3. Informacje w URL: Traktuj URL jako adres lub kartę indeksu. Wskazuje, jakiej książki lub informacji szukasz. Jednak uwaga: te karty nie powinny zawierać prywatnych notatek, ponieważ mogą być przeglądane przez innych.
  4. Szybkie i skuteczne odpowiedzi: Dzięki możliwości buforowania odpowiedzi, metoda GET może szybko reagować na powtarzające się żądania, podobnie jak dobrze zorganizowany bibliotekarz, który dokładnie wie, gdzie znajduje się każda książka.

Ale są też ograniczenia:

  1. Ograniczona przestrzeń na notatki: URL ma tylko pewną ilość miejsca na informacje. To jak pisanie na małej karcie indeksowej.
  2. Brak tajemnic: Ponieważ adresy URL są widoczne i mogą być przechowywane, nie powinieneś notować na nich żadnych wrażliwych informacji.
  3. Brak ingerencji: Obserwator nie wpływa na to, co obserwuje. Dlatego metody GET nie należy używać do modyfikowania danych. Mamy inne narzędzia w naszej cyfrowej skrzynce narzędziowej do tego celu.

Podsumowując, metoda GET to niezawodne i niezbędne narzędzie w cyfrowej przestrzeni, pomagające nam skutecznie i bezpiecznie pobierać informacje.

Przykład dla metody HTTP GET

Request header:
GET /data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/58.0.3029.110 Safari/537
Accept: application/json
Accept-Language: de-DE,de;q=0.5
Connection: keep-alive
Cache-Control: max-age=0
Response header:
Content-Type: application/json
Date: Mon, 31 July 2023 14:58:12 GMT
Server: Apache/2.4.7 (Ubuntu)
Cache-Control: no-cache