hotti: cgi Daten serverseitig begrenzen?

Beitrag lesen

hi,

natürlich bricht auch ein Server zusammen, wenn viele zeitgleiche Requests erfolgen und große Datenmengen in den RAM gelesen werden müssen.

QUERY_STRING / GET: Irgendwo gibt es eine Längenbegrenzung, da müsste ich erst suchen in den RFCs, das kannst aber auch Du ;-)

Wenn QS geparst wird, wird der ersteinmal komplett in den RAM gelesen, dann die Komponenten. Es gibt also einen Moment, wo die Daten faktisch doppelt vorliegen, dazu kommt noch das Unescape, was CPU braucht.

Interessanter wird es bei POST, hier generiert der Browser einen Header mit der Angabe Content-Length. An der Stelle könntest Du die Scriptverarbeitung abbrechen, wenn dieser Wert ein von Dir bestimmtes Limit erreicht hat. Zu dem Zeitpunkt, wo Content-Length bekannt ist, stehen die Daten noch an STDIN, sind also noch nicht geparst.

Es gibt außer substr() noch andere Möglichkeiten zur Begrenzung, die sind jedoch byte-orientiert. substr() ist zeichenorientiert, interessant wird das Thema bei utf-8, wo also Zeichen mehr als 1 byte lang sind, hierzu hilft das Pragma utf8;

no utf8;
print length('€'); # 3

use utf8;
print length('€'); # 1

Viel Spaß mit Perl,
Horst Haselhuhn