In der Praxis ist der Speicher knapp, und die Aufgabenvielfalt für deinen Webserver eher klein.
Ein Request vom Client sollte in z.B. 80 Zeichen / Zeile passen. Die hast du im einfachsten Fall statisch (global) zur Verfügung.
Alles was größer ist, ignoriert dein Webserver und liefert eine Standard-Antwort.
Wenn es noch knapper ist, wird gleich beim Einlesen alles vergessen, was den webserver nicht interessiert.
Nick Gammon hat ein schönes Beipiel, wie man seriell Zahlen einliest ohne sie als Text zwischenzuspeichern.
Wofür willst du malloc verwenden ? Dynamischen Speicher bräuchtest du doch nur wieder für die nächste client.read() Sequenz.