Skip to content

Gnädiger Apache 2.2

Auch wenn CRLF der offizielle Trenner im http-Protokoll ist, hilft das hier vielleicht dem ein oder anderen, der sich wundert, warum eine eingene (meist Mini-)Implementierung für http nicht mehr funktioniert: Es könnte an CRLF vs. LF liegen.

Der Apache 2.4 ist da offensichtlich deutlich kritischer, er akzeptiert nur CRLF (könnte an den Defaults in der Config liegen - das habe ich jetzt nicht explizit geprüft). Der Apache 2.2 ist da noch etwas gnädiger, er erlaubt sogar ein Mischen in einem Request.

Auch wenn ich weiß, dass man selten eine eigene http-"Implementierung" (das ist jetzt schon maßlos übertrieben) schreibt, so braucht man das unserer Erfahrung nach schon mal, z.B. wenn man aus einem bestehenden System heraus keinen externen Befehl aufrufen darf/kann, oder man in C/C++ unterwegs ist. Oder weil man es will ;-)

Nachtrag 08:32 Uhr

Die simple Antwort des Apache 2.4 ist ein "400 Bad Request". Mehr will er einem ungnädigerweise nicht sagen ;-)

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Der Adminbloger

Das ist versionsabhängig:

2.4.23

CODE:
% docker run -p 80:80 httpd:2.4.23


CODE:
% echo -en 'GET / HTTP/1.0\nHost: localhost\n\n' | nc -q 1 localhost 80<br /> HTTP/1.1 200 OK<br /> Date: Tue, 17 Jan 2017 14:06:49 GMT<br /> Server: Apache/2.4.23 (Unix)<br /> Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT<br /> ETag: "2d-432a5e4a73a80"<br /> Accept-Ranges: bytes<br /> Content-Length: 45<br /> Connection: close<br /> Content-Type: text/html<br /> <br /> It works!


2.4.25

CODE:
% docker run -p 80:80 httpd:2.4.25


CODE:
% echo -en 'GET / HTTP/1.0\nHost: localhost\n\n' | nc -q 1 localhost 80<br /> HTTP/1.1 400 Bad Request<br /> Date: Tue, 17 Jan 2017 14:05:21 GMT<br /> Server: Apache/2.4.25 (Unix)<br /> Content-Length: 226<br /> Connection: close<br /> Content-Type: text/html; charset=iso-8859-1<br /> <br /> <br /> <br /> 400 Bad Request<br /> <br /> Bad Request<br /> Your browser sent a request that this server could not understand.<br /> <br />

Der Adminblogger

Aus dem 2.4.25 Changelog:

CODE:
  *) core: New directive HttpProtocolOptions to control httpd enforcement<br />      of various RFC7230 requirements. [Stefan Fritsch, William Rowe]


Konfigurationsoption HttpProtocolOptions:

https://httpd.apache.org/docs/current/en/mod/core.html#httpprotocoloptions

Manuel Schmitt (manitu)

DANKE, dass Du Dir so viel Arbeit gemacht hast!

Max

Auch ich möchte mich bei "Der Adminblogger" herzlich bedanken!

Ich hatte stundenlang mit der Meldung "400 Bad Request" gekämpft; die Versionshinweise und Docker-Beispiele im Kommentar haben mich dann zur Lösung gebracht.

VIELEN DANK!

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

BBCode-Formatierung erlaubt
Formular-Optionen