Sven Rautenberg: Header und Body eines HTTP-Response sicher trennen

Beitrag lesen

Moin!

Ich öffne mit fsockopen() eine HTTP-Verbindung und bekomme eine Antwort mit einem Header und einem Body mit binären Daten(gzip). Trennen  kann ich header und body ja einfach mit:

print_r(explode("\r\n\r\n",$result));

Aber ist das auch sicher? Zum einen, wird das auf jedem Server mit \r\n\r\n umgebrochen?

Ja, das steht so im HTTP-Standard: Der Body eines HTTP-Responses beginnt nach einer Leerzeile.

Du solltest bedenken, dass eine Leerzeile durchaus auch durch "\n\n" realisiert werden kann - ich schreibe in meinen alten Perl-Skripten jedenfalls immer
print "Content-type: text/html\n\n";
um den HTTP-Header auszugeben und danach mit dem Body weiterzumachen. Insofern solltest du dich nicht auf "\r\n" als einziges Zeilentrennzeichen versteifen.

Außerdem solltest du sicherstellen, dass du nur das _erste_ Auftreten einer Leerzeile als Trennzeichen erkannt wird, denn sonst trennst du, wie du schon selbst erkannt hast, Teile ab, die nicht abgetrennt werden dürfen.

- Sven Rautenberg