Antwort "400 Bad Request" auf eine einfache HTTP-GET-Anforderung über Telnet abrufen

3180
Pierre Cathé

Ich lerne ein wenig Networking und habe Probleme mit der ersten Übung:
Ich sende eine grundlegende HTTP-GET-Anfrage mit telnet an httpbin.org.
Folgendes habe ich geschrieben:

$ telnet www.httpbin.org 80 Trying 23.23.171.5... Connected to www.httpbin.org.herokudns.com. Escape character is '^]'. GET /ip HTTP/1.0 

und hier bekomme ich:

HTTP/1.1 400 Bad Request Server: Cowboy Date: Tue, 09 Jan 2018 20:06:36 GMT Content-Length: 0 

Was mache ich falsch?

0

1 Antwort auf die Frage

4
Spiff

Das Problem besteht darin, HTTP 1.0 auf einem Server zu verwenden, der HTTP 1.1 (und den Host:Header, der ein obligatorischer Teil von HTTP 1.1 ist) erfordert, wahrscheinlich, weil wahrscheinlich virtuelles Hosting mehrerer Websites auf einer IP-Adresse erfolgt. Oder vielleicht liegt es hinter einem HTTP-Load-Balancer oder Reverse-Proxy, die im Grunde dasselbe tun: Mehrere separate Webserver-Domänennamen werden hinter einer IP-Adresse und einem Port unterstützt.

Das funktioniert für mich:

$ telnet www.httpbin.org 80 23.23.171.5 wird versucht ... Verbunden mit www.httpbin.org.herokudns.com. Escape-Zeichen ist '^]'. GET / ip HTTP / 1.1 Gastgeber: www.httpbin.org  

… Und ich komme zurück…

HTTP / 1.1 200 OK Verbindung: Keep-Alive Server: meinheld / 0.6.1 Datum: Di, 09. Januar 2018 22:01:19 GMT Inhaltstyp: application / json Zugriffskontrolle-Zulassen-Ursprung: * Access-Control-Allow-Credentials: true X-Powered-By: Flasche X-verarbeitete Zeit: 0.000454902648926 Inhaltslänge: 32 Via: 1.1 vegur  { "origin": "[Meine IPv4-Adresse wurde geändert]" }  ^] telnet> schließen $  

Beachten Sie, dass die Verbindung geöffnet blieb und ich die telnet>Aufforderung zum Schließen verlassen musste. Ich hätte das vermeiden können, indem ich Connection: closemeiner Anfrage einen Header hinzugefügt habe.

Wenn Sie HTTP / 1.1 mit einem Host:Header versuchen und es für Sie immer noch nicht funktioniert, vergewissern Sie sich, dass Ihr Telnet-Client CRLFs sendet und nicht nur Zeilenumbrüche oder Zeilenvorschübe. Stellen Sie sicher, dass Sie Ihre Anfrage mit einer zusätzlichen CRLF nach der letzten Zeile beenden.

CRLF ist hier entscheidend. Ich musste den User-Agent-Header nicht verwenden. pbies vor 5 Jahren 0