HTTP-Header: Wissenswertes über HTTP-Kopfzeilen

Wenn HTTP die Sprache ist, die Systeme und Geräte im Internet zur Verständigung nutzen, dann sind HTTP-Nachrichten Sätze und Wörter, die sie dabei austauschen. Doch das, was uns interessiert – Texte, Bilder, Videos etc. – ist dabei „nur“ die Nutzlast von Server-Antwortnachrichten. Die Systeme selbst interessiert mehr, was genau andere Systeme von ihnen wollen, wenn sie ihnen eine Nachricht schicken. Und das finden sie in den Headern von Client-Anfragen (Requests) und Server-Antworten (Response).

Beispiel-Request

Ein Beispiel für einen HTTP-Header: Wir möchten eine Webseite ansteuern und geben eine URL ein. Der Browser baut eine (TCP-)Verbindung zum Server auf und sendet ihm eine Anfrage (Request), genauer eine HTTP-GET-Anforderung:

GET  /beispielseite.html HTTP/1.1
HOST: beispieldomain.tld
Accept-Language: de
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1

Übersetzung: Der Server mit dem Hostnamen beispieldomain.tld möge die Ressource beispielseite.html zurücksenden, möglichst in deutscher Sprache und optimiert für das iPhone XR.

„Accept-Language“ und „User-Agent“ sind HTTP-Kopfzeilen (also HTTP-Header-Felder, oft auch nur „Header“ genannt). HTTP-Nachrichten bestehen immer aus einer Startzeile, optional einer oder mehreren Kopfzeilen, einer Leerzeile, die das Ende der Header-Felder anzeigt, und optional einem Nachrichten-Body. GET-Requests enthalten keinen Body; in Antwortnachrichten enthält der Body die jeweils angeforderte Ressource, also etwa eine HTML-, PHP-, CSS- oder Mediendatei. 

Beispiel-Response

Die Antwort des Servers auf die oben genannte Beispielanfrage könnte so aussehen:

HTTP/1.1 200 OK
Date: Sat, 16 May 2020 10:45:13 GMT
Server: Apache
Last-Modified: Mon, 27 Apr 2020 11:00:44 GMT
Accept-Ranges: bytes
Content-Length: 16209
Content-Type: text/html
Cache-Control: maxe-age=180
eTag: "x26e3"
Set-Cookie: id=dlvbhd32; Expires=Tue, 13 Oct 2020 00:00:00 GMT

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//DE ">
<html>
… [der Rest der 16209 Bytes von beispielseite.htm]
</html>

Alles von „Date: …“ bis „Set-Cookie: …“ sind wieder Kopfzeilen. Im Beispiel zeigt der Server dem Client u. a. mit „cache-control: max-age=180“ an, dass dieser bei erneutem Bedarf die lokal gespeicherte Webseite drei Minuten (180 Sekunden lang) verwenden kann, ohne sie noch einmal vom Server zu laden. Außerdem versucht der Server ein Cookie zu setzen, das bis zum 13. Oktober 2020 gültig sein soll. 

Das alles können Sie mit Kopfzeilen tun

Mit Kopfzeilen kann der Server dem Client eine Vielzahl von Informationen übermitteln, aber auch diverse Funktionen anstoßen, zum Beispiel Sicherheitsfunktionen des Browsers aktivieren, das Caching durch Browser oder Proxies steuern oder Cookies setzen. Damit werden HTTP-Kopfzeilen zu einem mächtigen Werkzeug für Entwickler und Webmaster.

Header-Felder unterteilen sich in reine Anfrage- bzw. Antwort-Kopfzeilen sowie sogenannte allgemeine Kopfzeilen (General Header Fields) und „Entity“-Kopfzeilen, die sowohl in Anfragen als auch in Antworten Verwendung finden können. Allgemeine Kopfzeilen liefern Informationen über die Nachricht im Ganzen. Dazu zählen zum Beispiel die schon erwähnten „Cache-Control“-Zeilen, aber auch etwa „Date“, „Transfer-Encoding“ (zur Absicherung der Nachricht) oder „Connection“ (zur Steuerung der Verbindung).

Entity-Kopfzeilen beziehen sich dagegen auf die „Entity“, also den „Inhalt“ der Nachricht einer Nachricht. Das können etwa eine Datei in einer Antwortnachricht oder Formulardaten in einem POST-Request sein. Gibt es wie bei GET-Requests keinen Body, beziehen sie sich auf die angeforderte Ressource.  „Content-Length“ und „Content-Type“ sind uns oben schon begegnet, andere sind „Expires“, „Last-Modified“ oder die Kopfzeile „Content-MD5“, mit der ein MD5-Hash mitgeschickt werden kann, um dem Empfänger eine Integritätsprüfung der Nachricht zu erlauben.

Autorisierung und Cookies

Eine wichtige Antwort-Kopfzeile ist „WWW-Authenticate“. Damit zeigt der Server (in einer Nachricht mit Status 401 „Unauthorized“) einem Client an, dass zum Zugriff auf die angeforderte Ressource Anmeldeinformationen erforderlich sind. Diese kann der Client in der Anfrage-Kopfzeile „Authorization“ übermitteln.

Eine weitere elementare Funktion, die über Header-Felder realisiert wird, sind Cookies. Denn HTTP ist ein sogenanntes zustandsloses Protokoll – ohne Cookies wäre es nicht möglich, verschiedene Nachrichten einem bestimmten Benutzer oder Anwendungszustand (zum Beispiel Warenkorb) zuzuordnen. Der Server setzt Cookies mit der Kopfzeile „Set-Cookie: …“; der Client sendet bei erneuten Anforderungen das Cookie per „Cookie: …“ mit.

Benutzerkonfigurierte Kopfzeilen

Es ist übrigens auch möglich, eigene Kopfzeilen zu definieren – zum Beispiel für Informationszwecke, bestimmte serverseitige Anwendungen oder die Fehlersuche. In Entwicklerkreisen hat sich eingebürgert, Custom-Header-Felder mit „X-…“ zu kennzeichnen; nötig ist das nicht.

Beispielsweise nutzt der Website-Security- und CDN-Anbieter Sucuri die Kopfzeile „x-sucuri-cache“. Daran kann der Client erkennen, ob eine angeforderte Ressource direkt von einem nahe gelegenen CDN-Proxy-Server geladen werden konnte („x-sucuri-cache: HIT“) oder vom Originalserver kam („x-sucuri-cache: MISS“).

Auch einige Security-Kopfzeilen wie „X-XSS-Protection“, „X-Content-Type-Options“ oder „X-Frame-Options“ sind nicht standardisiert, sondern wurden von Browserherstellern eingeführt (und werden daher u. U. nicht von allen Browsern unterstützt).Wer sich HTTP-Header mit ihren Kopfzeilen live ansehen möchte, kann dazu die Developer-Tools seines Browsers nutzen. Neben den schon beschriebenen Kopfzeilen werden Sie dabei wahrscheinlich auch die eine oder andere Überraschung erleben, weil die Webentwickler den Header zum alternativen Infokanal umfunktionieren. So findet man beispielsweise „X-Han: Shot first“ (von nextthing.org), „x-nananana: Batcache“ (von automattic.com) oder gleich mal ein Jobangebot:

x-hacker: If you're reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.

So konfigurieren Sie Ihre HTTP-Kopfzeilen selbst

Zum Abschluss noch ein kurzer Überblick, wie Sie HTTP-Header-Felder bei Apache, Nginx und Typo3 einrichten können. 

Bei Apache werden Kopfzeilen über das Modul mod_headers mit der Direktive Header konfiguriert (in der httpd.conf oder per .htaccess-Datei). So erzeugt

Header set X-Mein-Custom-Header "Wert"

die Kopfzeile 

X-Mein-Custom-Header: Wert

Bei Nginx erledigt dasselbe der folgende Eintrag in die Konfigurationsdatei nginx.conf (Kontext: httpserver oder location):

add_header X-Mein-Custom-Header Wert;

In Typo3 gibt es je nach Kopfzeile(n) verschiedene Möglichkeiten. Folgendermaßen aktivieren Sie per TypoScript das Browser-Caching:

config.sendCacheHeaders = 1

Für „content-length“ steht „config.enableContentLengthHeader“ zur Verfügung, für weitere Header „config.additionalHeaders“ (anzugeben als numerisches Array): 

config.additionalHeaders.10 {
header = X-Mein-Custom-Header1: Wert1
}

Wie Sie sehen, eröffnen HTTP-Kopfzeilen viele Möglichkeiten, die wir hier nur anreißen konnten. Deshalb wird es zu den Themen „Cache-Control“ und „Security“ eigene Beiträge geben. Bis bald!

End of article

DomainFactory

Über den Autor

DomainFactory

Als Qualitätsanbieter überzeugen wir mit HighEnd-Technologie und umfassenden Serviceleistungen. Mit mehr als 1,3 Millionen verwalteten Domainnamen gehören wir zu den größten Webhosting-Unternehmen im deutschsprachigen Raum.

0 Kommentare

Bitte füllen Sie das Captcha aus : *

Reload Image

Die von Ihnen hier erhobenen Daten werden von der domainfactory GmbH zur Veröffentlichung Ihres Beitrags in diesem Blog verarbeitet. Weitere Informationen entnehmen Sie bitte folgendem Link: www.df.eu/datenschutz