dedlfix: XML-Parser und anderer Schrott

Beitrag lesen

Tach!

Nachtrag zum HTTP-Pipelining. Es ist erst ab HTTP 1.1 verfügbar, dass ein Client mehrere Requests abschicken kann, ohne jeweils erst auf die Antwort warten zu müssen. Es ist dazu nichts weiter notwendig, also kein zusätzlicher Datenaustausch, mit dem ermittelt wird, ob dieses Feature überhaupt anwendbar ist. Aber, wie gesagt, das gibt es erst ab HTTP 1.1. Dazu muss der Client zunächst erst einmal in Erfahrung gebracht haben, ob der Server dieses auch beherrscht. Das geht am besten, in einer Verbindung, in der bereits ein Request mit keep-alive abgesetzt wurde, woraufhin man in der zugehörigen Antwort in der ersten Response-Header-Zeile das HTTP 1.1 erkennen kann.

Der Server kann nicht erkennen, ob der Client Pipelining machen möchte oder nicht. Es kann also auch nicht wissen, ob er warten soll, bis der Client fertig hat oder sofort antworten soll. Abgesehen davon, dass Pipelining auch nicht heißt, dass erstmal alle Requests beim Server angekommen sein müssen, bevor dieser darauf antworten darf.

Es ist also auch mit Pipelining nicht zu begründen, dass ein Webserver erst ein Connection: close abwartet, bevor er die Antworten schickt.

Programmtechnisch muss man im einfachsten Fall auf dem Server gar nichts machen, um Pipelining zu unterstützen, wenn der TCP/IP-Stack einen ausreichend großen Puffer enthält, in dem die empfangenen Daten erstmal zwischengespeichert werden, bevor sie die Webserver-Software abfragt. Letztere kann dann einfach bis zum doppelten CRLF lesen, den Request verarbeiten und beantworten. Anschließend liest sie weiter aus den gepufferten Daten bis zum nächsten CRLF² und so weiter und so fort.

dedlfix.