2011-01-04 3 views
0

Was ich mache: Der Versuch, sich mit dem HTTP-Protokoll und seiner Implementierung vertraut zu machen.Bei einem HTTP-GET kommen die Header zuerst, gefolgt vom Body (mit der HttpClient-Bibliothek von Apache)?

Meine Frage: Ist es möglich, die Header (speziell Content-Length) eines HTTP GET zu bekommen, bevor Sie den eigentlichen Körper lesen? Soweit ich weiß, könnte ich zu diesem Zweck einen HEAD-Aufruf verwenden, aber ich versuche zu sehen, ob es überhaupt erforderlich ist. Insbesondere in der HttpClient-Commons-Bibliothek (und den meisten anderen, die ich vermute) gibt es Methoden, um den Antworttext als Stream abzurufen. Wird dieser Stream aus dem Socket gelesen, oder wird er bereits gepuffert?

Danke!

Antwort

1

Wenn das Headerfeld für die Inhaltslänge im Antwortheader gesendet wird, können Sie es vor dem Antworttext lesen. Aber manchmal (dynamisch erzeugter Inhalt, ungepuffert) kann es weggelassen werden (rfc). Dies passiert, wenn Ihr Browser beim Herunterladen keine Fortschrittsanzeige anzeigen kann.

2

Der HTTP-Server sendet zuerst die Header. Ob der bestimmte HTTP-Client, den Sie verwenden, diese im Voraus anzeigt, ist eine separate Angelegenheit.

0

Kurz gesagt, ja die Header kommen zuerst. Immer.

Wie Sie HEAD Anfrage erwähnen wird der Client nur die Kopfzeilen holen lassen und keinen Inhalt, jedoch über eine Anfrage GET die Header immer verfügbar sind, und vor dem eigentlichen Inhalt kommen. Das Feld "content-length" ist jedoch für dynamische Inhalte optional. Daher ist es möglicherweise niemals verfügbar.

Abhängig von Ihrer Implementierung kann der Dampf überhaupt nicht gepuffert werden. In den meisten Fällen erhalten Sie beim Lesen über die Stream-Operatoren den Inhalt in einer kleinen gepufferten Einheit, normalerweise in einer Zeile.

0

Die Klasse httpclient commons streamt direkt vom Socket, sodass kein Speicher verloren geht. Wenn der Header für die Inhaltslänge übergeben wird, können Sie ihn lesen, ohne den gesamten Antworttext zu lesen.

Siehe http://hc.apache.org/httpclient-3.x/features.html