<< powrót
Opublikowano Dodaj komentarz

Protokół HTTP (Hypertext Transfer Protocol) – co to jest i jak działa

co to jest protokół http

Co to jest protokół HTTP? Czym jest żądanie wysyłane przez klienta, a czym odpowiedź wysyłana przez serwer? Na te pytania odpowiadam w poniższym artykule. Ponadto dowiesz się jakie są metody żądania oraz nagłówki, a także jakie są najczęściej używane statusy HTTP.

Co to jest protokół HTTP?

HTTP (Hypertext Transfer Protocol) jest zestawem reguł i zasad określających sposób wymiany informacji pomiędzy klientem a serwerem. Klient, czyli np. przeglądarka internetowa wysyła żądanie do serwera, a ten przesyła odpowiedź. Każde wysłane żądanie ma na celu uzyskanie dostępu do danego zasobu. Zasobem tym może być strona internetowa, obrazek, plik PDF, plik JavaScript, itp. Protokół HTTP dokładnie określa jak można uzyskać dostęp do tych zasobów.

Klienty potrafią interpretować otrzymaną odpowiedź, dzięki czemu przykładowo przeglądarka internetowa potrafi wyświetlić stronę internetową.

Warto wspomnieć także o tym, że protokół HTTP jest bezstanowy. Oznacza to, że ani klient, ani serwer nie przechowuje informacji o tym, jakie były wcześniej wysyłane zapytania pomiędzy nimi.

Czym jest żądanie HTTP

Żądanie HTTP jest to komunikat wysyłany przez klienta (np. przeglądarkę internetową) do serwera w celu uzyskania określonego zasobu lub wykonania konkretnej operacji na serwerze. Żądanie HTTP składa się z kilku elementów takich jak:

  1. Metoda żądania (np. GET, POST, PUT, DELETE) określająca rodzaj operacji, jaką klient chce wykonać na zasobie serwera.
  2. Wersja protokołu HTTP.
  3. Adres URL (Uniform Resource Locator), który wskazuje na konkretny zasób lub endpoint na serwerze.
  4. Nagłówki (headers), które zawierają dodatkowe informacje o żądaniu, takie jak preferowane języki, ciasteczka (cookies) itp.
  5. Ciało żądania (body), opcjonalna część, która zawiera dane wysyłane do serwera, na przykład w przypadku żądań typu POST.

Czym jest odpowiedź HTTP

Odpowiedź HTTP jest to komunikat wysyłany przez serwer w odpowiedzi na żądanie HTTP przesłane przez klienta. Odpowiedź HTTP zawiera informacje zwrotne dotyczące żądania. Podobnie jak żądanie, odpowiedź HTTP składa się z kilku elementów takich jak:

  1. Status odpowiedzi, który określa, czy żądanie zostało pomyślnie zrealizowane, czy wystąpił jakiś błąd. Status ten jest reprezentowany przez kod statusu HTTP, np. 200 OK, 404 Not Found, 500 Internal Server Error itp.
  2. Nagłówki (headers), które zawierają dodatkowe informacje o odpowiedzi.
  3. Ciało odpowiedzi (body), opcjonalna część, która zawiera żądane dane lub informacje zwrotne.

Protokół HTTP – czasowniki

Czasowniki HTTP zwane również metodami określają rodzaj działania, który klient chce wykonać na zasobie serwera. Każda metoda ma swoje określone zastosowanie.

GET
Jest to najczęściej używane żądanie HTTP. Podczas gdy wchodzisz na jakąkolwiek stronę internetową, Twoja przeglądarka wysyła do serwera zapytanie typu GET. Zapytanie GET służy do pobrania aktualnej wersji zasobu, który znajduje się na serwerze. Czyli jeśli wchodzisz na wybraną stronę internetową, Twoja przeglądarka informuje serwer, żeby ten wysłał jej aktualną wersję strony. Dane w zapytaniu GET są przesyłane w adresie URL. Dlatego nie należy w ten sposób przesyłać żadnych poufnych informacji takich jak np. hasła.

Odpowiedź na żądanie GET można przechowywać w cache.

HEAD
Żądanie HEAD jest podobne do GET, z tym wyjątkiem, że serwer zwraca tylko nagłówki odpowiedzi, bez ciała wiadomości. Żądanie najczęściej służy do sprawdzenia, czy dany zasób nie uległ zmianie. Jest to bardzo przydatne zwłaszcza w sytuacji, gdy wybrany zasób ma dużo danych. Wtedy nie trzeba za każdym razem go pobierać, aby sprawdzić, czy nie uległ zmianie. Wystarczy wysłać zapytanie HEAD i pobrać zawartość dopiero gdy ta uległa zmianie.

Odpowiedź na żądanie HEAD można przechowywać w cache.

POST
Żądanie POST jest jednym z podstawowych typów żądań w protokole HTTP. Jest używane do przesyłania danych do serwera, zazwyczaj w celu tworzenia lub aktualizacji zasobów. Główną cechą żądania POST jest to, że dane są przesyłane w ciele żądania, a nie w adresie URL, co odróżnia je od żądania GET.

Odpowiedzi na żądania POST nie są przechowywane w cache.

PUT
Żądanie PUT jest używane do aktualizacji zasobu na serwerze. Klient wysyła nową wersję zasobu, która ma zastąpić istniejący. Jeśli danego zasobu nie ma na serwerze, w takim przypadku jest on tworzony.

Odpowiedzi na żądania PUT nie należy przechowywać w cache.

PATCH
Metoda służy do aktualizacji zasobu. W przeciwieństwie do PUT wymaga, by dany zasób istniał.

DELETE
Pozwala na usunięcie określonego zasobu na serwerze.

Odpowiedzi na żądania DELETE nie należy przechowywać w cache.

OPTIONS
Służy do uzyskania informacji o dostępnych opcjach lub metodach komunikacji, które obsługuje określony zasób na serwerze.

Odpowiedzi na żądania OPTIONS nie należy przechowywać w cache.

TRACE
Jest to żądanie diagnostyczne, które pozwala klientowi sprawdzić, jak serwer przetwarza żądania, które do niego docierają. Serwer, otrzymując żądanie TRACE, powinien zwrócić kopię tego żądania w ciele odpowiedzi, aby klient mógł odczytać, jakie dokładnie nagłówki i dane zostały przesłane do serwera.

Odpowiedzi na żądania TRACE nie należy przechowywać w cache.

CONNECT
Metoda ta pozwala klientowi na ustanowienie połączenia z serwerem docelowym przez serwer pośredniczący.

Protokół HTTP – nagłówki

Nagłówki HTTP (Headers) to metadane przesyłane wraz z żądaniami i odpowiedziami. Są one dołączane zarówno przez klienty w zapytaniach, jak i serwery w odpowiedziach. Służą one do przekazywania dodatkowych informacji, które są istotne dla prawidłowego przetwarzania i interpretacji komunikacji między klientem a serwerem. Nagłówki są zwykle przedstawiane jako pary “nazwa: wartość” i są oddzielone od treści żądania lub odpowiedzi pustą linią.

Poniżej lista najczęściej używanych nagłówków:

Accept: Klient informuje serwer o tym jaki format jest w stanie obsłużyć, np. application/json.

Accept-Charset: Klient informuje serwer, które formaty kodowania znaków są akceptowalne dla odpowiedzi.

Accept-Encoding: Klient informuje serwer o tym, jakie rozumie sposoby kodowania ciała wiadomości. Jest to stosowane zwykle do określenia rodzaju kompresji.

Accept-Language: Służy do informowania serwera o preferowanym języku, który klient chciałaby otrzymać w odpowiedzi. Ten nagłówek pozwala serwerowi dostarczyć treść w odpowiednim języku w zależności od preferencji użytkownika.

Access-Control-Allow-Methods: Serwer w odpowiedzi na zapytanie OPTIONS informuje klienta jakie metody są dozwolone.

Access-Control-Allow-Origin: Nagłówek ten jest częścią mechanizmu kontroli dostępu do zasobów pomiędzy różnymi domenami, znanego jako CORS (Cross-Origin Resource Sharing). Serwer w ten sposób informuje klienta które zewnętrzne domeny mają dostęp do określonych zasobów.

Cache-Control: Nagłówek ten służy do zarządzania pamięcią podręczną cache. Może być użyty zarówno w żądaniu jak i odpowiedzi.

Connection: Nagłówek ten zawiera informacje o połączeniu pomiędzy klientem a serwerem.

Content-Encoding: Serwer informuje w ten sposób klienta o sposobie kodowania ciała wiadomości.

Content-Length: Określa długość treści w ciele żądania lub odpowiedzi, wyrażoną w liczbie bajtów. Jest to przydatne dla serwera i klienta do poprawnego odczytania i przetworzenia danych.

Content-Type: Sewer informuje w ten sposób klienta w jakim formacie jest wysłana odpowiedź.

Cookie: Za pomocą tego nagłówka są przesyłane ciasteczka, które zostały ustawione w przeglądarce.

Date: Nagłówek ten zawiera datę wykonania żądania lub odpowiedzi.

Etag: Nagłówek ten używany do zarządzania pamięcią podręczną cache.

Host: Określa domenę, do której kierowane jest żądanie.

Location: Nagłówek ten jest używany w odpowiedziach serwera, aby przekierować klienta (np. przeglądarkę internetową) do innego adresu URL. Jest szczególnie przydatny w sytuacjach, gdy żądany zasób został przeniesiony na inny adres URL.

Server: Zawiera informacje o serwerze, który obsługuje żądanie. Serwer informuje w ten sposób klienta o tym jakiego używa oprogramowania.

Set-cookie: Nagłówek ten służy do ustawiania ciasteczka.

User-Agent: Zawiera informacje o kliencie HTTP, tzn. o aplikacji lub przeglądarce, która wysyła żądanie. Jest to przydatne dla serwera do identyfikacji klienta i dostosowania odpowiedzi do jego potrzeb.

Statusy HTTP

Statusy HTTP są to trzyliczbowe kody, które serwer używa w odpowiedzi na żądania klientów. Kody statusu informują klienta o wyniku jego żądania oraz o stanie zasobu serwera. Statusy dzieli się na 5 grup.

Statusy 1xx

Są to statusy informacyjne, których rzadko używa się w praktyce.

Statusy 2xx

Statusy z tej grupy informują, że żądanie klienta zostało pomyślnie odebrane, zrozumiane i zaakceptowane przez serwer. Najczęściej używane statusy z tej grupy:

  • 200 OK: Żądanie zostało poprawnie przetworzone.
  • 201 Created: Żądanie zostało poprawnie przetworzone i nowy zasób został utworzony poprawnie.
  • 202 Accepted: Serwer zaakceptował żądanie do przetworzenia, ale nie jest jeszcze gotowy do jego finalizacji.
  • 204 No Content: Serwer poprawnie przetworzył żądanie, ale nie zwraca żadnej zawartości w odpowiedzi (ciało wiadomości test puste).

Statusy 3xx

Statusy te informują klienta, że wykonanie żądania wymaga przekierowania do innego miejsca. Statusy z tej grupy są używane, gdy zasób na serwerze został przeniesiony na inny adres URL, a klient musi być poinformowany o nowej lokalizacji zasobu. Najczęściej używane statusy z tej grupy:

  • 301 Moved Permanently: Informuje klienta, że zasób został trwale przeniesiony na nowy adres URL.
  • 302 Found (Moved Temporarily): Informuje, że zasób został tymczasowo przeniesiony na inny adres URL.
  • 304 Not Modified: Informuje, że zasób nie został zmodyfikowany od ostatniego żądania klienta. Jest to wykorzystywane w kontekście mechanizmu cache, gdzie klient może użyć lokalnej kopii zasobu bez pobierania go ponownie.

Statusy 4xx

Statusy z tej grupy oznaczają błędy klienta. Informują one klienta, że żądanie, które zostało wysłane do serwera, zawierało błędy lub nie mogło być zrealizowane przez serwer z powodu problemów z żądaniem po jego stronie. Najczęściej używane statusy z tej grupy:

  1. 400 Bad Request: Oznacza, że serwer nie może zinterpretować żądania ze względu na błąd w składni żądania. Na przykład, żądanie może zawierać niepoprawny format danych.
  2. 401 Unauthorized: Informuje, że dostęp do zasobu jest ograniczony, ponieważ klient nie dostarczył odpowiednich danych uwierzytelniających (np. loginu i hasła).
  3. 403 Forbidden: Oznacza, że klient nie ma uprawnień do dostępu do określonego zasobu. Serwer odrzuca żądanie, ponieważ klient nie ma odpowiednich uprawnień.
  4. 404 Not Found: Jest to jeden z najbardziej znanych kodów statusu. Oznacza, że serwer nie może odnaleźć żądanego zasobu pod podanym adresem URL.
  5. 405 Method Not Allowed: Informuje, że metoda żądania użyta przez klienta nie jest obsługiwana dla określonego zasobu. Na przykład, próba użycia metody POST na zasobie, który obsługuje tylko metody GET.
  6. 408 Request Timeout: Oznacza, że serwer zakończył oczekiwanie na całkowite przesłanie żądania przez klienta, ponieważ przekroczył limit czasu oczekiwania.

Statusy 5xx

Te kody statusu są używane, aby poinformować klienta o problemach, które wystąpiły po stronie serwera i uniemożliwiły poprawne przetworzenie żądania. Wiele z tych błędów może być spowodowanych przeciążeniem serwera, błędami w konfiguracji lub innymi problemami z serwerem. Najczęściej używane statusy z tej grupy:

  • 500 Internal Server Error: Jest to ogólny błąd serwera, który informuje klienta, że wystąpił problem po stronie serwera podczas próby przetworzenia żądania, ale dokładna przyczyna błędu nie jest określona.
  • 501 Not Implemented: Oznacza, że serwer nie obsługuje metody żądania używanej przez klienta lub że serwer nie może zrealizować żądania z powodu niewdrożonej funkcji.
  • 502 Bad Gateway: Informuje klienta, że serwer działający jako serwer proxy otrzymał nieprawidłową odpowiedź od serwera górnego poziomu podczas próby realizacji żądania.
  • 503 Service Unavailable: Oznacza, że serwer jest chwilowo niedostępny. Może to być spowodowane przeciążeniem serwera, konserwacją lub innymi problemami tymczasowymi.
  • 504 Gateway Timeout: Informuje klienta, że serwer działający jako serwer proxy nie otrzymał odpowiedzi w odpowiednim czasie od serwera górnego poziomu podczas próby realizacji żądania.

Czym jest protokół HTTPS

Protokół HTTPS, czyli Hypertext Transfer Protocol Secure, jest to zabezpieczona wersja protokołu HTTP. Różnica między HTTP a HTTPS polega głównie na dodatkowej warstwie zabezpieczeń, która została dodana do protokołu HTTPS w celu zapewnienia bezpiecznej komunikacji między klientem a serwerem.

W praktyce, kiedy witryna nie korzysta z protokołu HTTPS, dane wprowadzane przez użytkowników, takie jak hasła, czy inne wrażliwe informacje są przesyłane jako zwykły tekst. To oznacza, że te dane mogą być łatwo przechwycone przez potencjalnego atakującego, który podsłuchuje ruch sieciowy.

Z powodu coraz większej świadomości użytkowników na temat ryzyka związanego z ujawnieniem prywatnych danych, strony internetowe, które nie stosują protokołu HTTPS, nie budzą zaufania. W związku z tym, coraz więcej stron internetowych decyduje się na wdrożenie protokołu HTTPS, aby zapewnić swoim użytkownikom bezpieczne korzystanie z ich usług.

Omawiając protokół HTTPS warto również wspomnieć o wyszukiwarce Google.
Google zawsze stara się dostarczać użytkownikom najbardziej wartościowe i bezpieczne wyniki wyszukiwania. Dlatego też od dłuższego czasu promuje bezpieczne strony internetowe, które korzystają z protokołu HTTPS. Jednak posiadanie certyfikatu SSL samo w sobie nie jest jedynym czynnikiem, który wpływa na pozycję strony w wynikach wyszukiwania.

Protokół HTTP – podsumowanie

HTTP, czyli Hypertext Transfer Protocol, jest niezwykle istotnym protokołem w świecie internetowym, który umożliwia przesyłanie danych między klientami a serwerami. Jego prostota oraz elastyczność uczyniły go podstawą dla komunikacji w sieci WWW. Dzięki HTTP użytkownicy mogą łatwo pobierać i przeglądać zasoby internetowe, a deweloperzy mogą tworzyć interaktywne aplikacje internetowe.

Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments