Hallo,
der entscheidende Punkt ist das zwischen dem Header und dem Content zwei mal direkt hintereinander ein CRLF kommt, also eine Leerzeile. Das bedeutet daher auch das im Header selber keine Leerzeile vorhanden sein darf. Unmittelbar nach dem doppelten CRLF dürfen beliebige Bytes kommen welche alle zum Content gehören, also wenn dort 2 Leerzeilen sind dann enthält die übertragene Datei am Anfang eine Leerzeile. Im Header selber sollten auch nur reine ASCII-Zeichen benutzt werden.
Schau Dir einfach mal mit Wireshark o.ä. ein komplettes Beispiel an, HTTP ist eigentlich ziemlich simpel.
Grüße
Erik