Metoda HEAD

Metoda HEAD

Metoda HEAD działa tak samo jak metoda GET. Nie zwraca ona jednak treści wiadomości, a jedynie nagłówki. Powinny one być identyczne z tymi zwracanymi przez metodę GET o takich samych parametrach.

HEADJedynym wyjątkiem są nagłówki mówiące o treści wiadomości takie jak: Content-Length, Content-Range, które mogą nie wystąpić w odpowiedzi w metodzie HEAD.

Metoda GET

Request Response
GET /admin HTTP/1.1
Host: www.example.com
HTTP/1.1 200 OK
Date: Mon, 18 Aug 2012 22:44:11 GMT
Content-Type: text/html
Content-Length: 123<html>

</html>

Metoda HEAD

Request Response
HEAD /admin HTTP/1.1
Host: www.example.com
HTTP/1.1 200 OK
Date: Mon, 18 Aug 2012 22:44:11 GMT
Content-Type: text/html

Omawiana metoda być użyta do pozyskiwania informacji na temat zasobu bez jego przesyłania. Na przykład do sprawdzenia poprawności linków, daty ostatniej modyfikacji i tym podobnych informacji, które możemy odczytać z nagłówków. Zapytania HEAD mogą brać udział w cache’owaniu. Mianowicie zapytanie tego typu może skutkować oznaczeniem przechowywanego zasobu jako starego i wymagającego ponownego pobrania, ale nie może go zaktualizować (ponieważ sam zasób nie jest przesyłany).

RyzykO związane z zapytaniami HEAD

Generalnie HEAD nie jest rozpatrywane jako potencjalne źródło zagrożeń. Jednak w źle zaprojektowanych systemach istnieje ryzyko wykorzystania tej metody do obejścia zabezpieczeń związanych z logowaniem do systemu.

Aby pokazać działanie tego obejścia zabezpieczeń, posłużymy się przykładem zasobu, którego pobranie wymaga logowania. W tym przypadku przy próbie dostępu do zasobu następuje przekierowanie do strony z możliwością logowania do systemu. Zakładamy, że strona zapamiętuje informacje o statusie zalogowania w ciasteczkach.

Dla takiego zasobu po wykonaniu zapytania GET, zwracane jest przekierowanie do strony logowania. Jednak w przypadku niepoprawnej implementacji metody HEAD, wysłanie zapytania HEAD na ten sam adres url, spowoduje otrzymanie wyniku pozytywnego i nagłówków uzupełniających pliki ciasteczek. Dzięki temu zapamiętane zostaną informacje uwierzytelniające i kolejne wywołanie GET nie będzie już wymagało logowania. Dlatego należy zawsze pamiętać, żeby wywołanie HEAD zachowywało się identycznie jak w przypadku zapytania GET. Także w przypadku autoryzacji dostępu do zasobów.