2009-09-22 11 views

Odpowiedz

47

Z RFC2616:

Metoda (głowę) można stosować do wytwarzania metainformation o jednostkę obserwowaną na żądanie, bez przenoszenia samą jednostkę ciało. Metoda ta jest często wykorzystywana do testowania łącza hipertekstowe do ważności, dostępności i niedawnej modyfikacji.

Powód, dla którego HEAD jest preferowany do GET, wynika z braku treści wiadomości w odpowiedzi, co powoduje, że używa się go w scenariuszach, w których chcesz sprawdzić, czy treść w ogóle się zmieniła - zmiana ostatniej modyfikacji czas lub długość treści zwykle oznacza to.

Również żądanie HEAD zapewni pewne informacje na temat konfiguracji serwera (czy jest IIS/Apache itd.), Chyba że serwer został zamaskowany; Oczywiście jest to dostępne we wszystkich odpowiedziach, ale HEAD jest preferowany, szczególnie gdy nie znasz rozmiaru odpowiedzi. HEAD to również najłatwiejszy sposób sprawdzenia, czy witryna jest w górę lub w dół; znowu nieistotność treści wiadomości sprawia, że ​​HEAD jest idealnym kandydatem.

nie jestem tego pewien, ale czytników RSS/ATOM użyłby Head Over dostać się do ustalenia, czy zawartość paszy uległy zmianie.

+2

Aby dodać przykład: Tworzę interfejs API "klienci", który udostępnia dane do wielu aplikacji za pośrednictwem interfejsu API REST. Aplikacje będą regularnie sprawdzać, czy klient został zaktualizowany, ale nie chcemy wykonywać wszystkich połączeń DB ani ponownie wysyłać całego klienta za pomocą kabla. Zamiast tego wielokrotnie trafialiśmy na API z żądaniem HEAD na/customer/XYZ, informując nas o ostatniej zmianie. –

+0

Chcesz dodać kolejny przykład, mimo że jest to stary wpis. ElasticSearch zaleca używanie poleceń HEAD, jeśli chcesz sprawdzić, czy dokument istnieje. –

+0

Nie używasz HEAD, aby zobaczyć, czy dokument się zmienił, używaj "If-Modified-Since" lub "If-None-Match" (np. Spójrz w dziennik sieciowy przeglądarki na odpowiedzi "304 Not Modified", podczas gdy ponowne załadowanie tej strony). A HEAD jest (przynajmniej teoretycznie) w pełni nadmiarowy od HTTP/1.1, co pozwala na 'Range: bytes = 0-0'. –

3

To głównie dla przeglądarek i serwerów proxy, aby ustalić, czy mogą korzystać z pamięci podręcznej kopię dokumentu internetowej, bez konieczności pobierania całość (co raczej sprzeczna z celem cache).

+7

Czy używają tego przeglądarki? Myślałem, że po prostu użyją "GET", ale będą zawierać nagłówek żądania "If-Modified-Since". – David

+0

Dunno. Z tego, co widzę w Tamper Data, Firefox na pewno tego nie robi. Przypuszczam, że byłoby to bardziej użyteczne, gdyby było więcej kryteriów niż czas modyfikacji, które byłyby większą liczbą serwerów proxy niż przeglądarek. – chaos

+0

David ma rację, chyba że istnieje przeglądarka, która to robi.Jest to niekorzystne, ponieważ odpowiedź wskaże, czy klient powinien pobrać zawartość, czy nie, co spowoduje 2 żądania zamiast jednego. Prawdopodobnie przydatne dla innych klientów HTTP. –

22

HEAD HTTP może być również wykorzystane do wstępnego uwierzytelniania na serwerze WWW, zanim zrobisz HTTP PUT/POST niektórych dużych danych. Bez pierwszego żądania HEAD wysyłałbyś duże dane do serwera sieciowego dwa razy (ponieważ pierwsze żądanie zwróciłoby 401 nieautoryzowanych odpowiedzi z nagłówkiem uwierzytelniania WWW).