{"id":942,"date":"2018-03-02T12:29:33","date_gmt":"2018-03-02T12:29:33","guid":{"rendered":"http:\/\/enginsight.com\/?p=942"},"modified":"2023-10-26T14:05:17","modified_gmt":"2023-10-26T12:05:17","slug":"http-ein-blick-hinter-die-kulissen-des-internets","status":"publish","type":"post","link":"https:\/\/enginsight.com\/de\/blog\/http-ein-blick-hinter-die-kulissen-des-internets\/","title":{"rendered":"HTTP: Ein Blick hinter die Kulissen des Internets"},"content":{"rendered":"<p><em>Wenn man genauer dar&#xFC;ber nachdenkt, grenzt es eigentlich schon fast an Magie. Man gibt eine Zeichenkette in die Adresszeile seines Browsers ein, dr&#xFC;ckt einmal kurz auf Enter und schon sieht man den Wetterbericht f&#xFC;r das Wochenende oder die neuesten Fu&#xDF;ballergebnisse. Aber haben Sie schon einmal dar&#xFC;ber nachgedacht, was alles im Hintergrund abl&#xE4;uft, bis Sie zu Ihrem Leidwesen feststellen m&#xFC;ssen, dass der TSV Gr&#xFC;nkraut schon wieder verloren hat? HTTP spielt dabei eine zentrale Rolle.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Das HTTP Protokoll<\/h2>\n\n\n\n<p>Als normaler Benutzer nimmt man es kaum wahr, st&#xFC;nde es nicht am Anfang so vieler URLs, dabei beruht die Kommunikation im gesamten World Wide Web auf dem HTTP Protokoll. In diesem Artikel wollen wir uns daher den sogenannten <strong>HTTP Request-Response-Zyklus <\/strong>genauer ansehen, also alles was von der Eingabe der URL bis zum Anzeigen der Webseite im Browser, im Hintergrund abl&#xE4;uft.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"httpnachrichtenrequestresponse\">HTTP Nachrichten: Request &amp; Response<\/h3>\n\n\n\n<p><strong>HTTP<\/strong>&#xA0;steht f&#xFC;r &#x201E;Hypertext Transfer Protocol&#x201C;. Mittlerweile wird es haupts&#xE4;chlich dazu verwendet Webseiten aus dem WWW in einen Webbrowser zu laden. Die &#x201E;Kommunikationseinheiten&#x201C; in HTTP werden als Nachrichten bezeichnet. Prinzipiell gibt es zwei unterschiedliche Arten von HTTP Nachrichten. Die&#xA0;<strong><em>Anfrage<\/em>&#xA0;(bzw.&#xA0;<em>Request<\/em>)<\/strong> geht vom Benutzer (in diesem Zusammenhang oft&#xA0;<strong><em>Client<\/em>&#xA0;<\/strong>genannt) an den Server. Die&#xA0;<strong><em>Antwort<\/em>&#xA0;(bzw.&#xA0;<em>Response<\/em>)<\/strong> geht als Reaktion darauf vom <strong>Server <\/strong>zum Benutzer. Sehen wir uns dazu ein Beispiel an.<\/p>\n\n\n\n<p>Ein Benutzer (nennen wir ihn Herbert) m&ouml;chte eine Webseite aufrufen, z.B. den Steine &amp; Unkraut Onlineshop. Herbert m&ouml;chte sich die neu hinzugekommenen Produkte ansehen und zwar aus der Kategorie &bdquo;Steine&ldquo;. Er tippt daher folgende URL in seinen Browser ein:&nbsp;<code>http:\/\/www.SteineundUnkraut.org \/Neu\/Steine.html<\/code>Der Browser sendet daraufhin eine HTTP Anfrage an den Server, auf dem die Webseite des Onlineshops liegt. Dieser verarbeitet die Anfrage und sendet eine HTTP Antwort. Aber wie sieht so eine HTTP Nachricht konkret aus?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"httpnachrichtenaufbau\">HTTP Nachrichten: Aufbau<\/h3>\n\n\n\n<p>Eine typische HTTP Nachricht besteht aus 3 Teilen, der&#xA0;<em>Start-Line<\/em>, dem Nachrichtenkopf (bzw.&#xA0;<em>Header<\/em>) und dem Nachrichtenrumpf (bzw.&#xA0;<em>Body<\/em>). Die Informationen, die in diesen drei Teilen stehen, sind abh&#xE4;ngig davon ob die HTTP Nachricht eine HTTP Anfrage oder eine HTTP Antwort ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"httpanfrage\">HTTP Anfrage<\/h3>\n\n\n\n<p>Die&#xA0;<strong>Start-Line<\/strong>&#xA0;in einer HTTP Anfrage enth&#xE4;lt zun&#xE4;chst die&#xA0;<em>Methode<\/em>, ein Kommando, das dem Server sagt, was er eigentlich tun soll. Zwei sehr bekannte Beispiele f&#xFC;r HTTP Methoden sind zum einen&#xA0;<em>GET<\/em>&#xA0;(sagt dem Server, dass er Daten an den Benutzer senden soll) und&#xA0;<em>POST<\/em>&#xA0;(sagt dem Server, dass er Daten in der Datenbank speichern soll). In unserem Beispiel w&#xE4;re die Methode also&#xA0;<em>GET<\/em>, da Herberts Browser vom Server Daten (die Webseite) anfordert.<\/p>\n\n\n\n<p>Als n&#xE4;chstes in der Start-Line steht die&#xA0;<em>URI<\/em>, nicht zu verwechseln mit der&#xA0;<em>URL<\/em>. URIs werden zur Identifizierung benutzt und URLs zur Lokalisierung. Aber Vorsicht, Lokalisierung bedeutet gleichzeitig auch Identifizierung. Zum Beispiel kann man einen Menschen ja auch anhand seines Wohnorts identifizieren. Es sind also alle URLs gleichzeitig URIs. Es gibt allerdings URIs, die keine URLs sind. Z.B. ist&#xA0;<code>SteineundUnkraut.org<\/code>&#xA0;eine URI und&#xA0;<code>http:\/\/www.SteineundUnkraut.org<\/code>&#xA0;eine URL, da die Webseite nicht nur identifiziert wird, sondern HTTP uns auch zeigt, wo die Ressource (die Webseite) ist.<\/p>\n\n\n\n<p>Zum Schluss der Start-Line teilt der Browser noch mit, welche&#xA0;<em>HTTP Version<\/em>&#xA0;er benutzt. Die Start-Line aus unserem Beispiel k&#xF6;nnte also so aussehen:&#xA0;<code>GET \/Neu\/Steine.html HTTP 1.0<\/code><\/p>\n\n\n\n<p>Die&#xA0;<strong>Anfrage Header<\/strong>&#xA0;sind im Prinzip Paare, bestehend aus einem Namen (Gro&#xDF;- und Kleinschreibung m&#xFC;ssen beachtet werden), gefolgt von einem Doppelpunkt und einem Wert. Header spezifizieren bestimmte Regeln und Informationen, z.B. den Host. Das ist die Adresse des Servers, an den wir die Anfrage schicken. In den Headern kann man aber z.B. auch spezifizieren, welche Sprache der Client als Antwort akzeptiert (<em>Accept-Language<\/em>). Die Request Header in unserem Beispiel k&#xF6;nnten also so aussehen:<br><code>Host: www.SteineundUnkraut.org<\/code><br><code>Accept-Language: de<\/code><\/p>\n\n\n\n<p>Einen HTTP Anfrage&#xA0;<strong>Body<\/strong>&#xA0;brauchen wir an dieser Stelle, in unserem Beispiel nicht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"httpantwort\">HTTP Antwort<\/h3>\n\n\n\n<p>In der&#xA0;<strong>Start-Line<\/strong>&#xA0;der HTTP Antwort gibt es keine Methode oder URI. Hier haben wir nur die&#xA0;<em>HTTP Version<\/em>&#xA0;und einen&#xA0;<em>Status Code<\/em>. Dieser Status Code sagt dem Benutzer, ob die Anfrage erfolgreich war oder fehlgeschlagen ist. Status Code&#xA0;<em>200<\/em>&#xA0;gibt&#xA0;<em>&#x201E;OK&#x201C;<\/em>zur&#xFC;ck und bedeutet, dass die Anfrage erfolgreich bearbeitet wurde und das Ergebnis in der Antwort &#xFC;bertragen wird. Der Code dagegen, den wohl jeder Internetbenutzer kennt:&#xA0;<em>404<\/em>&#xA0;gibt&#xA0;<em>&#x201E;not found&#x201C;<\/em>&#xA0;zur&#xFC;ck und bedeutet, dass die angeforderte Ressource nicht gefunden wurde. Es gibt aber noch viele andere.<\/p>\n\n\n\n<p>Status Code&#xA0;<em>418<\/em>&#xA0;gibt z.B. zur&#xFC;ck&#xA0;<em>&#x201E;I&#x2019;m a teapot&#x201C;<\/em>&#xA0;und zeigt an, dass der Server sich weigert Kaffee zu kochen, da er eine Teekanne ist. Diese Fehlermeldung ist Teil des &#x201E;Hyper Text Coffee Pot Control Protocol&#x201C; und war als Erweiterung f&#xFC;r HTTP gedacht &#x2013; aber nur als Aprilscherz. Dennoch wurde der Fehler von humorvollen Entwicklern auch in bekannte Software-Projekte implementiert (z.B. Googles Programmiersprache Go).<\/p>\n\n\n\n<p>Die&#xA0;<strong>Antwort Header<\/strong>&#xA0;haben das gleiche Format wie die Anfrage Header. Allerdings kann man damit andere Informationen und Regeln spezifizieren. Zum Beispiel den Zeitpunkt des Absendens (<em>Date<\/em>) oder Informationen &#xFC;ber den verwendeten Webserver. Die Response Header in unserem Beispiel k&#xF6;nnten also z.B. so aussehen:<br><code>Date: Tue, 27 Feb 2018 08:12:31 GMT<\/code><br><code>Server: Apache\/1.3.27 (Unix) (Red-Hat\/Linux)<\/code><\/p>\n\n\n\n<p>Der&#xA0;<strong>Antwort Body<\/strong>&#xA0;enth&#xE4;lt dann die gew&#xFC;nschten Daten, also die Webseite.<\/p>\n\n\n\n<p>Je nach Methode, HTTP Version, etc.&#xA0;<em>muss<\/em>&#xA0;man andere oder aber auch gar keine Header senden. Man&#xA0;<em>kann<\/em>&#xA0;aber aus den offiziellen, im HTTP-Standard definierten Headern so viele ausw&#xE4;hlen und senden, wie man f&#xFC;r n&#xF6;tig erachtet. In der Regel gibt es &#xFC;brigens nicht nur eine HTTP Anfrage und HTTP Antwort, sondern mehrere. Zum Beispiel f&#xFC;r ein Bild, das sich auf der Webseite befindet, gibt es nochmal einen extra Austausch.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"sicherheitdurchhttpheader\">IT-Sicherheit durch HTTP Header<\/h3>\n\n\n\n<p>HTTP Header spielen auch aus sicherheitstechnischen Aspekten eine gro&#xDF;e Rolle. Sie sind z.B. ein einfaches Mittel die Besucher einer Webseite aktiv zu sch&#xFC;tzen. <\/p>\n\n\n\n<p>Wie genau das funktioniert und welche HTTP-Header Sie unbedingt setzen sollten, erfahren Sie in einem unserer n&#xE4;chsten Blogposts: <a href=\"https:\/\/enginsight.com\/de\/blog\/benoetige-ich-https\/\"><strong>Datensicherheit: Ben&#xF6;tige ich HTTPS?<\/strong><\/a><\/p>\n\n\n\n<p>Sofern Sie jetzt gleich schon pr&#xFC;fen m&#xF6;chten, ob diese wichtigen Header bei Ihnen gesetzt sind,&#xA0;registrieren&#xA0;Sie sich bei Enginsight und testen Sie unsere Plattform 14 Tage lang kostenlos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man genauer dar&#xFC;ber nachdenkt, grenzt es eigentlich schon fast an Magie. Man gibt eine Zeichenkette in die Adresszeile seines Browsers ein, dr&#xFC;ckt einmal kurz auf Enter und schon sieht man den Wetterbericht f&#xFC;r das Wochenende oder die neuesten Fu&#xDF;ballergebnisse. Aber haben Sie schon einmal dar&#xFC;ber nachgedacht, was alles im Hintergrund abl&#xE4;uft, bis Sie zu [&#x2026;]<\/p>\n","protected":false},"author":8,"featured_media":943,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_eb_attr":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-942","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-endpoint-netzwerksicherheit"],"_links":{"self":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/942","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/comments?post=942"}],"version-history":[{"count":0,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/942\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/media\/943"}],"wp:attachment":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/media?parent=942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/categories?post=942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/tags?post=942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}