HTTP ermöglicht das Offenhalten einer Verbindung um später weitere Anfragen über den selben Socket zu schicken. Dies minimiert den Overhead eines ständigen Verbindungsauf/ab-baus.
Im Apache Webserver gibt es eine Konfigurationsanweisung MaxKeepAliveRequests die die maximale Anzahl von Anfragen für eine solche offen gehaltene Verbindung bestimmt. Setzt man den Wert Beispielsweise auf 10 können in dieser einen Verbindung nur 10 Anfragen gestartet werden, danach wird der Server die Verbindung trennen.
Soweit so gut.
Nun gibt es das HTTP Feature “Range” was teilweise Dateiübertragung ermöglicht. Es ist mit Range weiterhin möglich mehrere Teile einer Datei anzufragen.
Ein HTTP Header wie etwa “Range: bytes=0-1,1-2,3-4″ würde somit jeweils das erste, zweite und dritte Byte der angeforderten Datei liefern. Eine spezielle Syntax davon ist “0-” was in etwa bedeutet schicke ab Byte 0 (Dateianfang) alles bis zum Ende der Datei.
Interessant ist das in Apache diese Range Requests nicht als KeepAlive Requests gezählt werden. Das bedeutet das obiges Beispiel mit den drei Bytes nur als ein Request gezählt wird.
Nun kann man sich ein kleines Perlscript schustern was in etwa wie folgt aussieht:
perl -e 'print "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: Keep-Alive\r\nRange: bytes=" . "0-," x 1000 . "\r\n\r\n"' | nc webserver 80
Dieser kleine Code Schnippsel schickt eine Anfrage die eintausend nicht gezählte Subrequests beinhaltet.
Letzte Kommentare