Originariamente inviato da cagnaluia
E' molto grossolano, prende tutta la risorsa e la spedisce al client (il browser).

Vorrei migliorarlo, nel senso che prenda piccole porzioni della risorsa richiesta e la trasferisca a pezzi più piccoli.
Vedo che stai "parsando" tu la request, il che generalmente non è banale (specialmente se dovessi analizzare anche gli header). Quindi stai realizzando una specie di server HTTP, sebbene davvero minimale.

Ma a parte questo, torniamo alla tua richiesta. Caricare tutto il file in memoria ovviamente non è proprio una buona cosa. La cosa "tipica" che si fa è istanziare un piccolo array di lunghezza predefinita, es. 1024, 2048 o comunque dimensioni del genere (non esagerare però ....) e poi fare un ciclo di lettura in cui leggi un blocco dal file e lo scrivi sul socket. Ovviamente devi anche usare il valore di ritorno della read, in quanto l'ultimo blocco letto può non riempire tutto l'array!

Ah e dovresti anche inviare lo status code e gli header nella response, almeno quello per indicare il content-type. Una cosa è se mandi una immagine, un'altra se mandi una pagina html, ecc...