2009-09-22 7 views

Antwort

47

Von RFC2616:

Diese Methode (HEAD) kann zur Gewinnung von Metainformation über die Entität durch die Anforderung selbst die Entität Körper übertragen, ohne implizierten verwendet werden. Diese Methode wird oft zum Testen von Hypertext-Links auf Gültigkeit, Accessibility und aktuellen Modifikation verwendet.

Der Grund, warum HEAD bevorzugt wird, ist auf das Fehlen des Nachrichtentexts in der Antwort, die er in Szenarien machen aufgrund wo Sie, wenn der Inhalt überhaupt geändert hat, um bestimmen wollen - eine Änderung in der letzten Änderung Zeit oder Inhaltslänge bedeutet dies normalerweise.

Auch eine HEAD-Anfrage wird einige Informationen über das Server-Setup (ob es IIS/Apache etc. ist), sofern der Server nicht maskiert wurde; Natürlich ist dies in allen Antworten verfügbar, aber HEAD wird bevorzugt, wenn Sie die Größe der Antwort nicht kennen. HEAD ist auch der einfachste Weg, um festzustellen, ob eine Site hoch oder runter ist. Wiederum macht die Irrelevanz des Nachrichtenkörpers HEAD zum idealen Kandidaten.

Ich bin mir nicht sicher, aber RSS/ATOM-Feed-Leser würden HEAD über GET verwenden, um festzustellen, ob sich der Inhalt des Feeds geändert hat.

+2

Um ein Beispiel hinzuzufügen: Ich baue eine "Kunden" API, die Daten zu mehreren Anwendungen über eine REST API bereitstellt. Die Apps möchten regelmäßig überprüfen, ob der Kunde aktualisiert wurde, aber wir möchten nicht alle DB-Joins durchführen oder den gesamten Kunden erneut über die Leitung senden. Stattdessen haben wir wiederholt die API mit einer HEAD-Anfrage bei/customer/XYZ aufgerufen, um uns mitzuteilen, wann es zuletzt eine Änderung gegeben hat. –

+0

Möchten Sie ein weiteres Beispiel hinzufügen, obwohl dies ein alter Beitrag ist. ElasticSearch empfiehlt die Verwendung von HEAD-Befehlen, wenn Sie sehen möchten, ob ein Dokument existiert. –

+0

Sie verwenden HEAD nicht, um zu sehen, ob sich ein Dokument geändert hat. Sie verwenden 'If-Modified-Since' oder' If-None-Match' (z. B. in Ihrem Browser-Netzwerkprotokoll nach "304 Not Modified" -Antworten) diese Seite neu laden). Und HEAD ist (zumindest theoretisch) vollständig redundant ab HTTP/1.1, was 'Range: bytes = 0-0' erlaubt. –

3

Es ist hauptsächlich für Browser und Proxies, zu bestimmen, ob sie eine zwischengespeicherte Kopie des Webdokuments verwenden können, ohne das Ganze herunterladen zu müssen (was den Zweck eines Caches eher zunichte machen würde).

+7

Tun dies aktuelle Browser? Ich dachte, sie würden nur ein "GET" verwenden, aber einen "If-Modified-Since" -Anforderungsheader enthalten. – David

+0

Weiß nicht. Was ich in Tamper Data sehen kann, ist Firefox sicher nicht. Ich nehme an, dass es nützlicher wäre, wenn mehr Kriterien als die Modifikationszeit involviert wären, was mehr Proxies als Browser wären. – chaos

+0

David hat Recht, außer es gibt einen Browser, der das macht.Es ist nachteilig, da die Antwort anzeigt, ob der Client den Inhalt herunterladen soll oder nicht, was zu zwei Anforderungen anstelle von einem führt. Wahrscheinlich nützlich für andere HTTP-Clients. –

22

Der HTTP HEAD kann auch zur Vorauthentifizierung an Webserver verwendet werden, bevor Sie HTTP PUT/POST einiger großer Daten ausführen. Ohne die erste HEAD-Anfrage würden Sie die großen Daten zweimal an den Webserver senden (da die erste Anfrage 401 eine unautorisierte Antwort mit WWW-Authentifizierungs-Header zurückgeben würde).