Schemat wiadomości HTTP

Schemat wiadomości HTTP

Nagłówki są to właściwości żądania i odpowiedzi przesyłane wraz z samą wiadomością. Służą one przede wszystkim do sterowania zachowaniem serwera oraz przeglądarki przez nadawcę wiadomości.

Spójrzmy na przykładowe wywołanie zapytania HTTP i na odpowiedź na nie. Na jego podstawie będziemy mogli poznać, do czego służą podstawowe nagłówki w zapytaniach.

Request:

GET index.html HTTP/1.1
 Host: www.wp.pl
 Connection: close
 User-Agent: Mozilla/5.0
 Accept: text/html

http-requestTreść podstawowego zapytania zaczyna się od typu żądania. Najpopularniejsze to POST i GET. W najprostszym ujęciu GET służy do pobierania danych, a POST do wysyłania ich do serwera. Szerzej na ten temat w punkcie metody HTTP.

Kolejnym elementem jest względny adres do zasobów na serwerze. W naszym przypadku odwołujemy się do strony index.html na serwerze wskazanym przez nagłówek Host, a mianowicie www.wp.pl. W tym miejscu może wystąpić również adres wraz z numerem portu.

Na kolejnym miejscu powinniśmy wyspecyfikować wersję protokołu, z której korzystamy.

Od tego momentu można ustawiać potrzebne nam nagłówki wiadomości. Poniżej opiszę tylko te z nich, które zostały użyte w przykładzie, jednak szerzej będą one omówione w poście o nagłówkach HTTP.

  • Host – definiuje adres url i port serwera, z którego pobieramy dane. Jest to część obowiązkowa w każdym żądaniu HTTP
  • Connection – służy do sterowania mechanizmem Persistent connection
  • User-Agent – określa jaka aplikacja wykonała zapytania. Jest to przydatne, jeżeli chcemy po stronie serwera generować treści zależne od aplikacji lub systemu.
  • Accept – pozwala zdefiniować, jakiego typu danych oczekujemy. Zazwyczaj przeglądarki są w stanie odkryć jaki typ danych jest oczekiwany po rozszerzeniach ścieżek adresów URL, jednak ten nagłówek jest częścią mechanizmu uzgadniania typu zawartości. Służy on do zdefiniowania, które formaty są czytelne dla klienta oraz które serwer może obsłuzyć

Response:

Status: HTTP/1.1 200 OK
 Server:Apache
 Content-type:text/html; charset=UTF-8
 Content-Length:39512
 Connection:close

<html>
<head>
   http://jquery-2.1.4.js
</head>
<body>
   <img src="image.png" />
</body>
</html>

W przypadku odpowiedzi od serwera, pierwszą informacją jest status powodzenia operacji wraz z wersją protokołu. Dla uproszczenia przyjmijmy, że status 200 oznacza powodzenie operacji, a wszystkie statusy większe od 400 oznaczają sytuacje błędne. Statusy te pozwalają przekazać wiele informacji począwszy od błędów po stan zasobu po operacji.

Także i tu serwer może ustawić dodatkowe właściwości dla danej odpowiedzi.

  • Serwer – pozwala przedstawić się serwerowi adekwatnie jak w przypadku nagłówka User-Agent w requescie.
  • Connection – działa podobnie jak wcześniej do mechanizmu Persistent connection
  • Content-Type i Content-Length pozwalają na przesłanie informacji o typie/formacie oraz o długości zwracanej treści.

Zawsze po zdefiniowaniu nagłówków, na końcu odpowiedzi znajduje się treść przesłanej wiadomości. W tym przypadku jest to kod HTML żądanej strony.