Verstehen Sie alle Aspekte von HTTP-Headern mit Bildern und Text

Verstehen Sie alle Aspekte von HTTP-Headern mit Bildern und Text

Was sind HTTP-Header

HTTP ist eine Abkürzung für „Hypertext Transfer Protocol“. Das gesamte World Wide Web verwendet dieses Protokoll. Fast der Großteil des Inhalts, den Sie im Browser sehen, wird über das HTTP-Protokoll übertragen, wie zum Beispiel dieser Artikel.

HTTP-Header sind der Kern von HTTP-Anfragen und -Antworten und enthalten Informationen über den Client-Browser, die angeforderte Seite, den Server usw.

Beispiel

Wenn Sie eine URL in die Adressleiste des Browsers eingeben, sendet Ihr Browser eine HTTP-Anfrage ähnlich der folgenden:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache

Die erste Zeile heißt „Anforderungszeile“ und beschreibt die grundlegenden Informationen der Anforderung, der Rest sind HTTP-Header.

Nachdem die Anfrage abgeschlossen ist, erhält Ihr Browser möglicherweise die folgende HTTP-Antwort:

HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent
<!-- ... rest of the html ... -->

Die erste Zeile wird als „Statuszeile“ bezeichnet, danach folgen die HTTP-Header und nach einer Leerzeile beginnt die Ausgabe (in diesem Fall eine HTML-Ausgabe).

Allerdings können Sie die HTTP-Header nicht sehen, wenn Sie die Seitenquelle anzeigen, obwohl sie zusammen mit dem, was Sie sehen, an den Browser gesendet werden.

Diese HTTP-Anfrage sendet auch einige Anfragen zum Empfangen anderer Ressourcen, wie z. B. Bilder, CSS-Dateien, JS-Dateien usw.

Schauen wir uns die Einzelheiten unten an.

So zeigen Sie HTTP-Header an

Die folgenden Firefox-Erweiterungen können Ihnen bei der Analyse von HTTP-Headern helfen:

1. Feuerwanze

2. Live-HTTP-Header

3. In PHP:

  • getallheaders() wird verwendet, um die Anforderungsheader abzurufen. Sie können auch das Array $_SERVER verwenden.
  • headers_list() wird verwendet, um die Antwortheader abzurufen.

Unter dem Artikel sehen Sie einige Beispiele mit PHP.

HTTP-Anforderungsstruktur

Die erste Zeile, „erste Zeile“ genannt, besteht aus drei Teilen:

  • „Methode“ gibt an, um welchen Anfragetyp es sich handelt. Die häufigsten Anfragetypen sind GET, POST und HEAD.
  • „Pfad“ bezieht sich auf den Pfad nach dem Host. Wenn Sie beispielsweise „http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/“ anfordern, lautet der Pfad „/tutorials/other/top-20-mysql-best-practices/“.
  • „Protokoll“ enthält „HTTP“ und die Versionsnummer; moderne Browser verwenden 1.1.

Die restlichen Zeilen sind jeweils ein „Name:Wert“-Paar. Sie enthalten verschiedene Informationen zur Anfrage und Ihrem Browser. „User-Agent“ gibt beispielsweise Ihre Browserversion und das von Ihnen verwendete Betriebssystem an. „Accept-Encoding“ teilt dem Server mit, dass Ihr Browser komprimierte Ausgaben wie gzip akzeptieren kann.

Die meisten dieser Header sind optional. Die HTTP-Anfrage kann sogar folgendermaßen verkürzt werden:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com

Und Sie erhalten weiterhin eine gültige Antwort vom Server.

Anfragetyp

Die drei häufigsten Anfragetypen sind: GET, POST und HEAD. Die ersten beiden sind Ihnen vielleicht schon aus Ihrer Erfahrung mit dem Schreiben von HTML vertraut.

GET: Ein Dokument abrufen

Die meisten HTML-, Bild-, JS-, CSS- usw.-Dateien, die an den Browser übertragen werden, werden über die GET-Methode angefordert. Es handelt sich um die primäre Methode zur Datenerfassung.

Um beispielsweise Artikel von Nettuts+ abzurufen, würde die erste Zeile der HTTP-Anfrage normalerweise folgendermaßen aussehen:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1

Sobald das HTML geladen ist, sendet der Browser eine GET-Anfrage zum Abrufen des Bildes, etwa so:

GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1

Formulare können auch per GET-Methode versendet werden. Hier ein Beispiel:

<form action="foo.php" method="GET">
First Name: <input name="first_name" type="text" />
Last Name: <input name="last_name" type="text" />
<input name="action" type="submit" value="Submit" />
</form>

Wenn dieses Formular abgeschickt wird, sieht die HTTP-Anfrage folgendermaßen aus:

GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1
...

Sie können Formulareingaben an den Server senden, indem Sie sie an die Abfragezeichenfolge anhängen.

POST: Daten an den Server senden

Obwohl Sie die GET-Methode verwenden können, um Daten an die URL anzuhängen und an den Server zu senden, ist es in vielen Fällen sinnvoller, POST zum Senden von Daten an den Server zu verwenden. Das Senden großer Datenmengen über GET ist nicht praktikabel und unterliegt gewissen Einschränkungen.

Es ist üblich, Formulardaten per POST-Anfrage zu senden. Lassen Sie uns das obige Beispiel ändern, um POST zu verwenden:

<form action="foo.php" method="POST">
First Name: <input name="first_name" type="text" />
Last Name: <input name="last_name" type="text" />
<input name="action" type="submit" value="Submit" />
</form>

Beim Absenden dieses Formulars wird eine HTTP-Anfrage wie diese erstellt:

POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
first_name=John&last_name=Doe&action=Submit

Dabei sind drei Dinge zu beachten:

  • Der Pfad in der ersten Zeile wurde einfach zu /foo.php, ohne die Abfragezeichenfolge.
  • Es wurden Content-Type- und Content-Length-Header hinzugefügt, die Aufschluss über die gesendeten Informationen geben.
  • Alle Daten werden nach den Headern in Form einer Abfragezeichenfolge gesendet.

POST-Anfragen können auch mit AJAX, Anwendungen, cURL usw. verwendet werden. Und für alle Formulare zum Hochladen von Dateien ist die Verwendung der POST-Methode erforderlich.

HEAD: Header-Informationen empfangen

HEAD ist GET sehr ähnlich, außer dass HEAD den Inhaltsteil der HTTP-Antwort nicht akzeptiert. Wenn Sie eine HEAD-Anfrage senden, bedeutet dies, dass Sie nur an den HTTP-Headern interessiert sind, nicht am Dokument selbst.

Mit dieser Methode kann der Browser feststellen, ob die Seite geändert wurde, und so den Cache steuern. Zudem kann ermittelt werden, ob das gesuchte Dokument existiert.

Wenn Ihre Website beispielsweise viele Links hat, können Sie einfach an jeden davon eine HEAD-Anfrage senden, um festzustellen, ob es defekte Links gibt. Das ist viel schneller als die Verwendung von GET.

HTTP-Antwortstruktur

Wenn der Browser eine HTTP-Anfrage sendet, reagiert der Server auf die Anfrage mit einer HTTP-Antwort. Wenn Ihnen der Inhalt egal ist, sieht die Anfrage folgendermaßen aus:

Die erste wertvolle Information ist das Protokoll. Derzeit verwenden Server HTTP/1.x oder HTTP/1.1.

Anschließend folgt eine kurze Meldung mit Statusangabe. Code 200 bedeutet, dass unsere Anfrage erfolgreich gesendet wurde und der Server nach den Header-Informationen das angeforderte Dokument zurückgibt.

Wir alle haben die „404“-Seite gesehen. Wenn ich beim Server einen nicht vorhandenen Pfad anfordere, antwortet uns der Server mit 404 statt 200.

Der restliche Antwortinhalt ähnelt der HTTP-Anfrage. Dabei handelt es sich um Serversoftware, Änderungsdatum der Seite/Datei, MIME-Typ usw.

Auch diese Header sind optional.

HTTP-Statuscodes

  • 200 wird verwendet, um eine erfolgreiche Anfrage anzuzeigen.
  • 300 zeigt eine Weiterleitung an.
  • 400 wird verwendet, um ein Problem mit der Anforderung anzuzeigen.
  • 500 wird verwendet, um ein Serverproblem anzuzeigen.

200 Erfolg (OK)

Wie bereits erwähnt, wird 200 verwendet, um eine erfolgreiche Anfrage anzuzeigen.

206 Teilweiser Inhalt

Wenn eine Anwendung nur Dateien innerhalb eines bestimmten Bereichs anfordert, gibt sie 206 zurück.

Dies wird normalerweise für die Downloadverwaltung, die Fortsetzung von Downloads oder das Herunterladen von Dateien in Blöcken verwendet.

404 Nicht gefunden

404

Leicht zu verstehen

401 Nicht autorisiert

Dieser Status wird für passwortgeschützte Seiten zurückgegeben. Wenn Sie nicht das richtige Passwort eingeben, wird in Ihrem Browser die folgende Meldung angezeigt:

401

Beachten Sie, dass dies nur eine passwortgeschützte Seite ist und das Popup-Fenster zur Passwortabfrage folgendermaßen aussieht:

401_Eingabeaufforderung

403 Verboten

Wenn Sie keine Berechtigung zum Zugriff auf eine Seite haben, wird der Status 403 zurückgegeben. Dies passiert normalerweise, wenn Sie versuchen, einen Ordner zu öffnen, der keine Indexseite hat. Wenn Ihre Servereinstellungen das Anzeigen von Verzeichnisinhalten nicht zulassen, wird ein 403-Fehler angezeigt.

Einige andere Methoden senden auch Berechtigungsbeschränkungen. Sie können beispielsweise nach IP-Adresse blockieren, was etwas htaccess-Unterstützung erfordert.

order allow,deny
deny from 192.168.44.201
deny from 224.39.163.12
deny from 172.16.7.92
allow from all

302 (oder 307) Vorübergehend verschoben und 301 Dauerhaft verschoben

Diese beiden Zustände werden bei der Weiterleitung des Browsers angezeigt. Sie verwenden beispielsweise einen URL-Kürzungsdienst wie bit.ly. So erfahren sie auch, wer auf ihre Links klickt.

302 und 301 sind für Browser sehr ähnlich, für Suchmaschinen-Crawler gibt es jedoch einige Unterschiede. Wenn Ihre Website beispielsweise gewartet wird, würden Sie den Client-Browser mit 302 auf eine andere Adresse umleiten. Die Crawler der Suchmaschinen werden Ihre Seiten dann in Zukunft neu indizieren. Wenn Sie jedoch eine 301-Weiterleitung verwenden, teilen Sie den Suchmaschinen-Crawlern mit, dass Ihre Website dauerhaft an eine neue Adresse verschoben wurde.

500 Interner Serverfehler

Dieser Code wird normalerweise angezeigt, wenn ein Seitenskript abstürzt. Die meisten CGI-Skripte geben im Gegensatz zu PHP keine Fehlermeldungen an den Browser aus. Wenn ein schwerwiegender Fehler auftritt, senden sie einfach einen 500-Statuscode. Zu diesem Zeitpunkt müssen Sie zur Fehlerbehebung das Serverfehlerprotokoll überprüfen.

Vollständige Liste

Eine vollständige Beschreibung der HTTP-Statuscodes finden Sie hier . Oder Sie können hier nachsehen (http://tools.jb51.net/table/http_status_code).

HTTP-Anforderung in HTTP-Headern

Sehen wir uns nun einige allgemeine HTTP-Anforderungsinformationen in HTTP-Headern an.

Alle diese Header sind im $_SERVER-Array von PHP zu finden. Sie können auch die Funktion getallheaders() verwenden, um alle Header-Informationen auf einmal abzurufen.

Gastgeber

Eine HTTP-Anfrage wird an eine bestimmte IP-Adresse gesendet. Die meisten Server können jedoch mehrere Websites unter derselben IP-Adresse hosten. Daher muss der Server wissen, welchen Domänennamen der Browser anfordert.

Host: rlog.cn

Dies ist nur der Basis-Hostname mit der Domäne und den Subdomänen.

In PHP kann dies über $_SERVER['HTTP_HOST'] oder $_SERVER['SERVER_NAME'] angezeigt werden.

Benutzer-Agent

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)

Dieser Header kann die folgenden Informationen enthalten:

  • Browsername und Versionsnummer.
  • Name und Versionsnummer des Betriebssystems.
  • Standardsprache.

Dies ist eine gängige Methode, die einige Websites verwenden, um Informationen über ihre Besucher zu sammeln. Sie können beispielsweise ermitteln, ob ein Besucher Ihre Site von einem Mobiltelefon aus aufruft, und entscheiden, ob er auf eine mobile Site umgeleitet werden soll, die auch bei niedrigeren Auflösungen eine gute Leistung zeigt.

In PHP können Sie den User-Agent über $_SERVER['HTTP_USER_AGENT'] abrufen.

if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {
echo "Please stop using IE6!";
}

Akzeptieren-Sprache

Accept-Language: en-us,en;q=0.5

Diese Information kann die Standardspracheinstellung des Benutzers angeben. Wenn die Website über verschiedene Sprachversionen verfügt, können diese Informationen zur Umleitung des Browsers des Benutzers verwendet werden.

Es können mehrere Sprachen enthalten sein, indem diese durch Kommas getrennt werden. Die erste ist die bevorzugte Sprache und die anderen Sprachen tragen einen „q“-Wert, um die Sprachpräferenz des Benutzers anzuzeigen (0~1).

Verwenden Sie in PHP $_SERVER["HTTP_ACCEPT_LANGUAGE"], um diese Informationen zu erhalten.

if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {
header('Location: http://french.mydomain.com');
}

Accept-Kodierung

Accept-Encoding: gzip,deflate

Die meisten modernen Browser unterstützen die GZIP-Komprimierung und melden diese Informationen an den Server. Zu diesem Zeitpunkt sendet der Server das komprimierte HTML an den Browser. Dadurch kann die Dateigröße um fast 80 % reduziert und Downloadzeit und Bandbreite gespart werden.

In PHP können Sie $_SERVER["HTTP_ACCEPT_ENCODING"] verwenden, um diese Informationen abzurufen. Der Wert wird dann beim Aufruf der Methode ob_gzhandler() automatisch erkannt, so dass eine manuelle Überprüfung nicht notwendig ist.

// enables output buffering
// and all output is compressed if the browser supports it
ob_start('ob_gzhandler');

Wenn geändert seit

Wenn eine Seite bereits in Ihrem Browser zwischengespeichert ist, erkennt der Browser bei Ihrem nächsten Besuch, ob das Dokument geändert wurde, und sendet einen Header wie diesen:

If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

Wenn es seitdem nicht geändert wurde, gibt der Server „304 Nicht geändert“ zurück und gibt den Inhalt nicht zurück. Der Browser liest den Inhalt automatisch aus dem Cache

In PHP kann dies mit $_SERVER['HTTP_IF_MODIFIED_SINCE'] erkannt werden.

// assume $last_modify_time was the last the output was updated
// did the browser send If-Modified-Since header?
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
// if the browser cache matches the modify time
if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
// send a 304 header, and no content
header("HTTP/1.1 304 Not Modified");
exit;
}
}

Es gibt auch einen HTTP-Header namens Etag, der verwendet wird, um festzustellen, ob die zwischengespeicherten Informationen korrekt sind. Dies werden wir später erläutern.

Plätzchen

Wie der Name schon sagt, werden die in Ihrem Browser gespeicherten Cookie-Informationen an den Server gesendet.

Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar

Es handelt sich dabei um eine Reihe von durch Semikolon getrennten Name-Wert-Paaren. Cookies können auch eine Sitzungs-ID enthalten.

In PHP kann auf einzelne Cookies über das Array $_COOKIE zugegriffen werden. Sie können das Array $_SESSION direkt verwenden, um Sitzungsvariablen abzurufen. Wenn Sie eine Sitzungs-ID benötigen, können Sie anstelle von Cookies die Funktion session_id() verwenden.

echo $_COOKIE['foo'];
// output: bar
echo $_COOKIE['PHPSESSID'];
// output: r2t5uvjq435r4q7ib3vtdjq120
session_start();
echo session_id();
// output: r2t5uvjq435r4q7ib3vtdjq120

Referrer

Wie der Name schon sagt, enthält der Header die Informationen zur verweisenden URL.

Wenn ich beispielsweise die Homepage von Nettuts+ besuche und auf einen Link klicke, wird dieser Header an den Browser gesendet:
Referer: http://net.tutsplus.com/

In PHP kann dieser Wert über $_SERVER['HTTP_REFERER'] abgerufen werden.

if (isset($_SERVER['HTTP_REFERER'])) {
$url_info = parse_url($_SERVER['HTTP_REFERER']);
// is the surfer coming from Google?
if ($url_info['host'] == 'www.google.com') {
parse_str($url_info['query'], $vars);
echo "You searched on Google for this keyword: ". $vars['q'];
}
}
// if the referring url was:
// http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http+headers&aq=f&oq=&aqi=g-p1g9
// the output will be:
// You searched on Google for this keyword: http headers

Möglicherweise ist Ihnen aufgefallen, dass das Wort „Referrer“ falsch als „Referer“ geschrieben ist. Leider wurde es so in die offiziellen HTTP-Spezifikationen aufgenommen und blieb dort hängen.

Genehmigung

Wenn für eine Seite eine Autorisierung erforderlich ist, öffnet der Browser ein Anmeldefenster. Nach Eingabe des richtigen Kontos sendet der Browser eine HTTP-Anforderung, die diesmal jedoch einen Header wie diesen enthält:

Authorization: Basic bXl1c2VyOm15cGFzcw==

Die im Header enthaltenen Informationen sind Base64-codiert. Beispielsweise wird base64_decode('bXl1c2VyOm15cGFzcw==') in 'myuser:mypass' umgewandelt.

In PHP kann dieser Wert mit $_SERVER['PHP_AUTH_USER'] und $_SERVER['PHP_AUTH_PW'] abgerufen werden.

Weitere Einzelheiten erläutern wir im Abschnitt WWW-Authentifizierung.

HTTP-Antwort in HTTP-Headern

Lassen Sie mich nun einige allgemeine HTTP-Antwortinformationen in HTTP-Headern verstehen.

In PHP können Sie die Header-Antwortinformationen über header() festlegen. PHP hat automatisch einige notwendige Header-Informationen gesendet, z. B. zum Laden von Inhalten, Setzen von Cookies usw. Sie können die Header-Informationen sehen, die gesendet wurden und über die Funktion headers_list() gesendet werden. Sie können auch die Funktion headers_sent() verwenden, um zu überprüfen, ob die Header gesendet wurden.

Cache-Steuerung

w3.org definiert es wie folgt: „Das Cache-Control-General-Header-Feld wird verwendet, um Anweisungen anzugeben, die von allen Caching-Mechanismen entlang der Anfrage-/Antwortkette befolgt werden MÜSSEN.“ Die „Caching-Mechanismen“ umfassen einige Gateway- und Proxy-Informationen, die Ihr ISP möglicherweise verwendet.

Zum Beispiel:

Cache-Control: max-age=3600, public

„public“ bedeutet, dass die Antwort von jedem zwischengespeichert werden kann, und „max-age“ gibt die Anzahl der Sekunden an, die der Cache gültig ist. Durch die Cachespeicherung Ihrer Website werden Downloadzeit und Bandbreite erheblich reduziert und gleichzeitig die Ladegeschwindigkeit des Browsers erhöht.

Sie können das Caching auch deaktivieren, indem Sie die Direktive „no-cache“ festlegen:

Cache-Control: no-cache

Weitere Einzelheiten finden Sie unter w3.org .

Inhaltstyp

Dieser Header enthält den „MIME-Typ“ des Dokuments. Der Browser entscheidet anhand dieses Parameters, wie das Dokument analysiert wird. Beispielsweise würde eine HTML-Seite (oder eine PHP-Seite mit HTML-Ausgabe) etwa Folgendes zurückgeben:

Content-Type: text/html; charset=UTF-8

„Text“ ist der Dokumenttyp, „HTML“ ist der Dokumentuntertyp. Dieser Header enthält auch weitere Informationen, beispielsweise den Zeichensatz.

Wenn es ein Bild ist, lautet die Antwort:

Content-Type: image/gif

Anhand des MIME-Typs kann der Browser entscheiden, ob zum Öffnen des Dokuments ein externes Programm oder eine eigene Erweiterung verwendet werden soll. Das folgende Beispiel ruft Adobe Reader auf:

Content-Type: application/pdf

Beim direkten Laden ermittelt Apache normalerweise automatisch den MIME-Typ des Dokuments und fügt dem Header die entsprechenden Informationen hinzu. Und die meisten Browser verfügen über eine gewisse Fehlertoleranz. Wenn der Header diese Informationen nicht oder falsch bereitstellt, erkennt er den MIME-Typ automatisch.

Eine Liste gängiger MIME-Typen finden Sie hier .

In PHP können Sie finfo_file() verwenden, um den IME-Typ einer Datei zu erkennen.

Inhaltsdisposition

Dieser Header weist den Browser an, ein Fenster zum Herunterladen von Dateien zu öffnen, anstatt zu versuchen, den Inhalt der Antwort zu analysieren. Zum Beispiel:

Content-Disposition: attachment; filename="download.zip"

Daraufhin zeigt der Browser ein Dialogfeld wie das folgende an:

Beachten Sie, dass auch der entsprechende Content-Type-Header gesendet wird.

Content-Type: application/zip
Content-Disposition: attachment; filename="download.zip"

Inhaltslänge

Wenn der Inhalt an den Browser übertragen werden soll, kann der Server diesen Header verwenden, um den Browser über die Größe (Bytes) der zu übertragenden Datei zu informieren.

Content-Length: 89123

Diese Informationen sind beim Herunterladen von Dateien sehr nützlich. So erkennt der Browser den Fortschritt des Downloads.

Hier habe ich beispielsweise ein Dummy-Skript geschrieben, um einen langsamen Download zu simulieren.

// it's a zip file
header('Content-Type: application/zip');
// 1 million bytes (about 1megabyte)
header('Content-Length: 1000000');
// load a download dialogue, and save it as download.zip
header('Content-Disposition: attachment; filename="download.zip"');
// 1000 times 1000 bytes of data
for ($i = 0; $i < 1000; $i++) {
echo str_repeat(".",1000);
// sleep to slow down the download
usleep(50000);
}

Das Ergebnis wird ungefähr so ​​aussehen:

Nun kommentiere ich den Content-Length-Header aus:

// it's a zip file
header('Content-Type: application/zip');
// the browser won't know the size
// header('Content-Length: 1000000');
// load a download dialogue, and save it as download.zip
header('Content-Disposition: attachment; filename="download.zip"');
// 1000 times 1000 bytes of data
for ($i = 0; $i < 1000; $i++) {
echo str_repeat(".",1000);
// sleep to slow down the download
usleep(50000);
}

Das Ergebnis ist folgendes:

Der Browser zeigt Ihnen lediglich an, wie viel heruntergeladen wurde, nicht jedoch, wie viel Sie insgesamt herunterladen müssen. Und der Fortschrittsbalken zeigt den Fortschritt auch nicht an.

Etag

Dies ist ein weiterer Header, der für Caching-Zwecke generiert wird. Es wird so aussehen:

Etag: "pub1259380237;gz"

Der Server kann dem Browser diese Informationen zusammen mit jeder gesendeten Datei als Antwort übermitteln. Dieser Wert kann das letzte Änderungsdatum des Dokuments, die Dateigröße oder die Dateiprüfsumme enthalten. Der Browser speichert es zusammen mit den empfangenen Dokumenten im Cache. Wenn der Browser das nächste Mal dieselbe Datei anfordert, sendet er die folgende HTTP-Anforderung:

If-None-Match: "pub1259380237;gz"

Wenn der Etag-Wert des angeforderten Dokuments damit übereinstimmt, sendet der Server einen 304-Statuscode statt 2oo. Und es wird kein Inhalt zurückgegeben. Der Browser lädt die Datei dann aus dem Cache.

Zuletzt geändert

Wie der Name schon sagt, gibt dieser Header den Zeitpunkt der letzten Änderung des Dokuments im GMT-Format an:

Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT

$modify_time = filemtime($file);
header("Last-Modified: " . gmdate("D, d MYH:i:s", $modify_time) . " GMT");

Es bietet einen weiteren Caching-Mechanismus. Ein Browser könnte eine Anfrage wie diese senden:

If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

Dies haben wir bereits im Abschnitt „If-Modified-Since“ besprochen.

Standort

Dieser Header wird zur Umleitung verwendet. Der Server MUSS diesen Header senden, wenn der Antwortcode 301 oder 302 ist. Wenn Sie beispielsweise http://www.nettuts.com besuchen, erhält Ihr Browser die folgende Antwort:

HTTP/1.x 301 Moved Permanently
...
Location: http://net.tutsplus.com/
...

In PHP können Sie Besucher folgendermaßen umleiten:
header('Location: http://net.tutsplus.com/');

Standardmäßig wird ein Statuscode 302 gesendet. Wenn Sie einen 301 senden möchten, schreiben Sie Folgendes:

header('Location: http://net.tutsplus.com/', true, 301);

Cookie setzen

Wenn eine Website Cookies für Ihren Browserverlauf setzen oder aktualisieren muss, verwendet sie einen Header wie diesen:

Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT
Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT

Jedes Cookie wird als separater Header gesendet. Beachten Sie, dass das Setzen von Cookies über js nicht im HTTP-Header widergespiegelt wird.

In PHP können Sie Cookies mit der Funktion setcookie() setzen und PHP sendet die entsprechenden HTTP-Header.

setcookie("TestCookie", "foobar");

Es werden die folgenden Header gesendet:

Set-Cookie: TestCookie=foobar

Ist kein Ablaufdatum angegeben, wird das Cookie beim Schließen des Browsers gelöscht.

WWW-Authentifizierung

Eine Website könnte diesen Header über HTTP senden, um einen Benutzer zu authentifizieren. Wenn der Browser diese Antwort in der Kopfzeile sieht, öffnet er ein Popup.

WWW-Authenticate: Basic realm="Restricted Area"

Es wird ungefähr so ​​aussehen:

In einem Kapitel des PHP-Handbuchs gibt es einen einfachen Code, der zeigt, wie dies mit PHP funktioniert:

if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}

Inhaltskodierung

Dieser Header wird normalerweise gesetzt, wenn der Rückgabeinhalt komprimiert wird.

Content-Encoding: gzip

In PHP wird dieser Header automatisch gesetzt, wenn Sie die Funktion ob_gzhandler() aufrufen.

Original-URL: http://css9.net/all-about-http-headers/

<<:  Initialisieren Sie Ubuntu 16.04 in drei Minuten und stellen Sie Java-, Maven- und Docker-Umgebungen bereit

>>:  Reine JS-Methode zum Exportieren von Tabellen nach Excel

Artikel empfehlen

Slot-Anordnung und Nutzungsanalyse in Vue

Die Betriebsumgebung dieses Tutorials: Windows 7-...

MySQL-Anweisungsanordnung und zusammenfassende Einführung

SQL-Anweisungen (Structured Query Language), also...

js-Lernnotizen: Schlüsselwörter „class“, „super“ und „extended“

Inhaltsverzeichnis Vorwort 1. Erstellen Sie Objek...

Die Popup-Maske der Frontend-Seite verhindert das Scrollen der Seite

Ein Problem, auf das Frontend-Entwickler häufig s...

JavaScript implementiert Informationen zur Kennwortfeldüberprüfung

In diesem Artikelbeispiel wird der spezifische Ja...

Designbeispiele für Dropdown-Menüs und Schiebemenüs

Ich habe viele Websites gefunden, die Dropdown- od...

JavaScript-Grundlagen: Funktion zur sofortigen Ausführung

Inhaltsverzeichnis Funktionsformat sofort ausführ...

Beschreiben Sie kurz die Replikation der MySQL-Überwachungsgruppe

Originaltext: https://dev.mysql.com/doc/refman/8....

Beispielmethode zum Anzeigen von IP in Linux

Die Kenntnis der IP-Adresse eines Geräts ist wich...

Einige wunderbare Verwendungsmöglichkeiten von URL-Objekten in JavaScript

Inhaltsverzeichnis Vorwort Parameter analysieren ...