Kategorien
Allgemein

HTTP Protokoll Grundlagen für Anfänger

Wie funktioniert das Internet-Protokoll HTTP?

Ganz einfach: der Client (Webbrowser) sendet eine Anfrage (GET), das Protokoll über das angefragt wird und zwei leerzeilen. Anschließend bekommt der Browser vom Server die Seite ausgeliefert:

als Browser

Auf der Linux-Shell kann eine solche Abfrage mittels Netcat (nc) und echo nachgebildet werden:

echo -e "GET / HTTP/1.1\r\nHost: www.heise.de\r\n\r\n" | nc www.heise.de 80

Die Anfrage „GET / HTTP/1.1“, die Mitteilung zu welcher Domain die Anfrage gehört (host:) und zwei Zeilenumbrüche (\r\n) werden mittels Netcat an Port 80 des Servers www.heise.de gesandt.

als Server

Auch ein HTTP-Server lässt sich auf der Linux Schell auf die gleiche weise „simulieren“:

echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLinux, da bin ich"|nc -l 8080

Beim Aufruf der Seite in einem Browser erscheint der Text „Linux, da bin ich“ und auf der Shell erfolgt die Ausgabe des Anfrage Headers.
Der Aufruf der Seite im Firefox

GET / HTTP/1.1
Host: 85.214.55.47:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Alternativ kann der Abruf der Seite auch über den Vorangegangenen Befehl erfolgen. Die Anfrage wird von Netcat jedoch nicht geprüft, so das Du bei der Anfrage auch beliebige Zeichen in die Abfrage schreiben kannst.:

metzger@linux:~$ echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLinux, da bin ich"|nc -l 8080 &
[1] 1465
metzger@linux:~$ echo -e "GET / HTTP/1.1\r\nHost: meins\r\n\r\n"|nc localhost 8080
GET / HTTP/1.1
Host: meins


HTTP/1.1 200 OK
Content-Type: text/html

Linux, da bin ich
[1]+ Fertig echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLinux, da bin ich" | nc -l 8080

Allerdings ist der Aufruf der „Seite“ auf diese Weise nur ein einziges mal möglich!

Um einen wiederholten Abruf zu ermöglichen kannst Du das Netcat in eine Endlosschleife legen.:

while true; do echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nLinux, da bin ich"|nc -l 8080; done