Heim  >  Artikel  >  Web-Frontend  >  Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten

Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten

WBOY
WBOYOriginal
2016-05-16 16:41:482870Durchsuche

Was sind HTTP-Header?

HTTP wird vom „Hypertext Transfer Protocol“ geschrieben. Fast die meisten Inhalte, die Sie im Browser sehen, werden über das HTTP-Protokoll übertragen.

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

Beispiel

Wenn Sie eine URL in die Adressleiste des Browsers eingeben, stellt Ihr Browser eine http-Anfrage ähnlich der folgenden:
GET /tutorials/other/top-20-mysql-best-practices / HTTP/1.1<code>GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1<br>Host: net.tutsplus.com<br>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)<br>Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8<br>Accept-Language: en-us,en;q=0.5<br>Accept-Encoding: gzip,deflate<br>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br>Keep-Alive: 300<br>Connection: keep-alive<br>Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120<br>Pragma: no-cache<br>Cache-Control: no-cache<br>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)
Akzeptieren: 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<font face="NSimsun">HTTP/1.x 200 OK<br>Transfer-Encoding: chunked<br>Date: Sat, 28 Nov 2009 04:36:25 GMT<br>Server: LiteSpeed<br>Connection: close<br>X-Powered-By: W3 Total Cache/0.8<br>Pragma: public<br>Expires: Sat, 28 Nov 2009 05:36:25 GMT<br>Etag: "pub1259380237;gz"<br>Cache-Control: max-age=3600, public<br>Content-Type: text/html; charset=UTF-8<br>Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT<br>X-Pingback: http://net.tutsplus.com/xmlrpc.php<br>Content-Encoding: gzip<br>Vary: Accept-Encoding, Cookie, User-Agent<br><!-- ... rest of the html ... --></font>Verbindung: Keep-Alive

Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120

Pragma: no-cache

Cache-Control: no-cache

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

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

HTTP/1.x 200 OK

Transfer-Encoding: chunked

Datum: Sa, 28. November 2009 04:36:25 GMT

Server: LiteSpeedVerbindung : schließenX-Powered-By: W3 Total Cache/0.8Pragma: publicLäuft ab: Sa, 28. November 2009 05:36:25 GMT

Etag: "pub1259380237;gz"

Cache-Control: max-age=3600, publicContent-Type: text/html; charset=UTF-8Letzte Änderung: Sa, 28. Nov. 2009 03:50:37 GMTX -Pingback: http://net.tutsplus.com/xmlrpc.php

Content-Encoding: gzip

Vary: Accept-Encoding, Cookie, User-Agent Die erste Zeile heißt „Statuszeile“ und danach folgen die HTTP-Header. Nach der Leerzeile beginnt die Ausgabe des Inhalts (in diesem Fall eine HTML-Ausgabe).

Aber wenn Sie den Quellcode der Seite anzeigen, können Sie die HTTP-Header nicht sehen, obwohl sie zusammen mit dem, was Sie sehen, an den Browser gesendet werden. Diese HTTP-Anfrage sendet auch Anfragen zum Empfang einiger anderer Ressourcen, wie Bilder, CSS-Dateien, JS-Dateien usw.

Werfen wir einen Blick auf die Details.

So sehen Sie HTTP-Header
  • Die folgenden Firefox-Erweiterungen können Ihnen bei der Analyse von HTTP-Headern helfen: 1. Feuerkäfer

2.

Live-HTTP-Header

3. In PHP: getallheaders() wird verwendet, um Anforderungsheader abzurufen. Sie können auch das $_SERVER-Array verwenden headers_list() wird verwendet, um Antwortheader zu erhalten. Am Ende des Artikels sehen Sie einige Beispiele für die Verwendung von PHP. Struktur der HTTP-Anfrage Die erste Zeile, auch „erste Zeile“ genannt, besteht aus drei Teilen:
  • „Methode“ gibt an, um welche Art von Anfrage es sich handelt. Die häufigsten Anfragetypen sind GET, POST und HEAD
  • „Pfad“ gibt den Pfad nach dem Host wieder. 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 Versionsnummer, moderne Browser verwenden 1.1.
Jede verbleibende Zeile ist 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. HTTP-Anfragen können sogar so optimiert werden, dass sie wie folgt aussehen:

<font face="NSimsun">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1<br>Host: net.tutsplus.com</font>

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

Anfragetyp

Die drei häufigsten Anforderungstypen sind: GET, POST und HEAD. Die ersten beiden kennen Sie möglicherweise aus dem Prozess des HTML-Schreibens.

GET: Holen Sie sich ein Dokument

Die meisten HTML-, Bilder-, JS-, CSS-Dateien usw., die an den Browser übertragen werden, werden über die GET-Methode angefordert. Es ist die primäre Methode zur Datenbeschaffung.

Um beispielsweise Nettuts-Artikel zu erhalten, sieht die erste Zeile der http-Anfrage normalerweise so aus:

<font face="NSimsun">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1</font>

Sobald der HTML-Code geladen ist, sendet der Browser eine GET-Anfrage, um das Bild abzurufen, etwa so:

<font face="NSimsun">GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1</font>

Das Formular kann auch über die GET-Methode gesendet werden. Hier ist ein Beispiel:

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

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

<font face="NSimsun">GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1<br>...</font>

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

POST: Daten an den Server senden

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

Es ist üblich, Formulardaten mithilfe von POST-Anfragen zu senden. Ändern wir das obige Beispiel, um die POST-Methode zu verwenden:

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

Durch das Absenden dieses Formulars wird eine HTTP-Anfrage wie folgt erstellt:

<font face="NSimsun">POST /foo.php HTTP/1.1<br>Host: localhost<br>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)<br>Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8<br>Accept-Language: en-us,en;q=0.5<br>Accept-Encoding: gzip,deflate<br>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br>Keep-Alive: 300<br>Connection: keep-alive<br>Referer: http://localhost/test.php<br>Content-Type: application/x-www-form-urlencoded<br>Content-Length: 43<br>first_name=John&last_name=Doe&action=Submit</font>

Hier gibt es drei Dinge zu beachten:

    Der Pfad in der ersten Zeile wurde einfach in /foo.php ohne die Abfragezeichenfolge geändert.
  • Content-Type- und Content-Lenght-Header hinzugefügt, die relevante Informationen zum Senden von Nachrichten bereitstellen
  • Alle Daten werden nach den Headern in Form einer Abfragezeichenfolge gesendet.
  • POST-Anfrage kann auch für AJAX, Anwendung, cURL usw. verwendet werden. Und alle Datei-Upload-Formulare müssen die POST-Methode verwenden.

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 das, 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 das Caching steuern. Außerdem kann festgestellt werden, ob das angeforderte Dokument vorhanden ist.

Wenn Ihre Website beispielsweise viele Links enthält, können Sie einfach HEAD-Anfragen an diese senden, um festzustellen, ob tote Links vorhanden sind. Dies ist viel schneller als die Verwendung von GET.

HTTP-Antwortstruktur

Wenn der Browser eine HTTP-Anfrage sendet, antwortet der Server mit einer HTTP-Antwort auf die Anfrage. Wenn Ihnen der Inhalt egal ist, würde die Anfrage so aussehen:

Die erste wertvolle Information ist die Vereinbarung. Derzeit verwenden Server HTTP/1.x oder HTTP/1.1.

Die nächste kurze Nachricht stellt den Status dar. Code 200 bedeutet, dass unsere Anfrage erfolgreich gesendet wurde und der Server das von uns angeforderte Dokument nach den Header-Informationen zurückgibt.

Wir haben alle die Seite „Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten“ gesehen. Wenn ich vom Server einen nicht vorhandenen Pfad anfordere, antwortet uns der Server mit Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten statt 200.

Der Rest des Antwortinhalts ähnelt der HTTP-Anfrage. Dabei geht es um die Serversoftware, den Zeitpunkt der Änderung der Seite/Datei, den MIME-Typ usw.

Auch diese Header sind optional.

HTTP-Statuscode

  • 200 wird verwendet, um eine erfolgreiche Anfrage anzuzeigen
  • 300, um eine Umleitung anzuzeigen
  • 400 wird verwendet, um ein Problem mit der Anfrage anzuzeigen
  • 500 wird verwendet, um ein Problem mit dem Server anzuzeigen.

200 Erfolg (OK)

Wie bereits erwähnt, wird 200 verwendet, um anzuzeigen, dass die Anfrage erfolgreich ist.

206 Teilinhalte

Wenn eine Anwendung nur Dateien innerhalb eines bestimmten Bereichs anfordert, wird 206 zurückgegeben.

Dies wird normalerweise zur Download-Verwaltung, zum Fortsetzen von Downloads oder zum Herunterladen von Dateien in Blöcken verwendet.

Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten Nicht gefunden

Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten

Leicht verständlich

Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten Nicht autorisiert

Passwortgeschützte Seiten geben diesen Status zurück. Wenn Sie nicht das richtige Passwort eingeben, wird in Ihrem Browser die folgende Meldung angezeigt:

Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten

Beachten Sie, dass dies nur eine passwortgeschützte Seite ist. Das Popup-Fenster, in dem Sie nach einem Passwort gefragt werden, sieht folgendermaßen aus:

Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten_prompt

403 Verboten

Wenn Sie keine Berechtigung zum Zugriff auf eine Seite haben, wird der Status 403 zurückgegeben. Dies geschieht normalerweise, wenn Sie versuchen, einen Ordner zu öffnen, der keine Indexseite hat. Wenn die Servereinstellungen die Anzeige des Verzeichnisinhalts nicht zulassen, wird ein 403-Fehler angezeigt.

Einige andere Möglichkeiten führen ebenfalls zu Berechtigungseinschränkungen, zum Beispiel können Sie nach IP-Adresse blockieren, was etwas Hilfe von htaccess erfordert.

<font face="NSimsun">order allow,deny<br>deny from 192.168.44.201<br>deny from 224.39.163.12<br>deny from 172.16.7.92<br>allow from all</font>

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

Diese beiden Zustände werden angezeigt, wenn der Browser umleitet. Sie nutzen beispielsweise einen URL-Verkürzungsdienst wie bit.ly. So erfahren sie, wer auf ihre Links geklickt hat.

302 und 301 sind für Browser sehr ähnlich, es gibt jedoch einige Unterschiede für Suchmaschinen-Crawler. Wenn Ihre Website beispielsweise gewartet wird, leiten Sie den Client-Browser mit einer 302 an eine andere Adresse um. Suchmaschinen-Crawler werden Ihre Seite 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 erscheint normalerweise, wenn das 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

Die vollständige Beschreibung der HTTP-Statuscodes

finden Sie hier .

HTTP-Anfrage in HTTP-Headern

Sehen wir uns nun einige allgemeine HTTP-Anforderungsinformationen an, die in HTTP-Headern zu finden sind.

Alle diese Header-Informationen finden Sie im $_SERVER-Array von PHP. 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, aber die meisten Server haben die Möglichkeit, mehrere Websites unter derselben IP-Adresse zu hosten, daher muss der Server wissen, welchen Domänennamen der Browser nach Ressourcen anfordert.

<font face="NSimsun">Host: rlog.cn<code><font face="NSimsun">Host: rlog.cn</font>

Dies ist nur der Basis-Hostname, einschließlich der Domäne und der Subdomänen.

In PHP können Sie es über $_SERVER['HTTP_HOST'] oder $_SERVER['SERVER_NAME'] anzeigen.

Benutzeragent

<font face="NSimsun">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)<code><font face="NSimsun">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)</font>

Dieser Header kann die folgenden Informationen enthalten:

  • Browsername und Versionsnummer
  • Betriebssystemname und Versionsnummer
  • Standardsprache.

Dies ist eine gängige Methode, die einige Websites verwenden, um Besucherinformationen zu sammeln. Sie können beispielsweise feststellen, ob ein Besucher über ein Mobiltelefon auf Ihre Website zugreift, und entscheiden, ob Sie ihn auf eine mobile Website weiterleiten möchten, die bei niedrigeren Auflösungen eine gute Leistung erbringt.

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

erhalten

<font face="NSimsun">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {<br>echo „Bitte hören Sie auf, IE6 zu verwenden!“;<br> }<code><font face="NSimsun">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {<br>echo "Please stop using IE6!";<br>}</font>

Akzeptiere-Sprache

<font face="NSimsun">Accept-Language: en-us,en;q=0.5<code><font face="NSimsun">Accept-Language: en-us,en;q=0.5</font>

Diese Informationen beschreiben die Standardspracheinstellung des Benutzers. Wenn die Website über verschiedene Sprachversionen verfügt, können diese Informationen verwendet werden, um den Browser des Benutzers umzuleiten.

Es können mehrere Sprachen durch Kommatrennung übertragen werden. Die erste ist die bevorzugte Sprache, und andere Sprachen tragen einen „q“-Wert, der die Präferenz des Benutzers für die Sprache angibt (0 ~ 1).

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

<font face="NSimsun">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {<br>header('Location: http:// english.mydomain.com');<br>}<code><font face="NSimsun">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {<br>header('Location: http://french.mydomain.com');<br>}</font>

Accept-Encoding

<font face="NSimsun">Accept-Encoding: gzip,deflate<code><font face="NSimsun">Accept-Encoding: gzip,deflate</font>

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 werden, um Downloadzeit und Bandbreite zu sparen.

In PHP können Sie $_SERVER["HTTP_ACCEPT_ENCODING"] verwenden, um diese Informationen abzurufen. Wenn Sie dann die Methode ob_gzhandler() aufrufen, wird dieser Wert automatisch erkannt, sodass Sie ihn nicht manuell ermitteln müssen.

<font face="NSimsun">// aktiviert die Ausgabepufferung<br>// und alle Ausgaben werden komprimiert, wenn der Browser dies unterstützt<br>ob_start('ob_gzhandler');<code><font face="NSimsun">// enables output buffering<br>// and all output is compressed if the browser supports it<br>ob_start('ob_gzhandler');</font>

If-Modified-Since

Wenn eine Seite in Ihrem Browser zwischengespeichert wurde, erkennt der Browser beim nächsten Durchsuchen, ob das Dokument geändert wurde, und sendet dann einen solchen Header:

<font face="NSimsun">If-Modified-Since: Sa, 28. Nov. 2009 06:38:19 GMT<code><font face="NSimsun">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</font>

Wenn es seitdem nicht geändert wurde, gibt der Server „304 Not Modified“ zurück und es werden keine weiteren Inhalte zurückgegeben. Der Browser liest den Inhalt automatisch aus dem Cache

In PHP können Sie zur Erkennung $_SERVER['HTTP_IF_MODIFIED_SINCE'] verwenden.

<font face="NSimsun">// davon ausgehen, dass $last_modify_time das letzte Mal war, dass die Ausgabe aktualisiert wurde<br>// Hat der Browser den If-Modified-Since-Header gesendet?<br>if(isset ($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// wenn der Browser-Cache mit der Änderungszeit übereinstimmt<br>if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// einen 304-Header und keinen Inhalt senden<br>header("HTTP/1.1 304 Not Modified");<br>exit;<br>}<br>}<code><font face="NSimsun">// assume $last_modify_time was the last the output was updated<br>// did the browser send If-Modified-Since header?<br>if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// if the browser cache matches the modify time<br>if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// send a 304 header, and no content<br>header("HTTP/1.1 304 Not Modified");<br>exit;<br>}<br>}</font>

Es gibt auch einen HTTP-Header namens Etag, der verwendet wird, um festzustellen, ob die zwischengespeicherten Informationen korrekt sind. Wir werden ihn später erklären.

Keks

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

<font face="NSimsun">Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar<code><font face="NSimsun">Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar</font>

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

In PHP kann ein einzelnes Cookie durch Zugriff auf das $_COOKIE-Array abgerufen werden. Sie können das Array $_SESSION direkt verwenden, um die Sitzungsvariablen abzurufen. Wenn Sie eine Sitzungs-ID benötigen, können Sie anstelle von Cookies die Funktion session_id() verwenden.

<font face="NSimsun">echo $_COOKIE['foo'];<br>// output: bar<br>echo $_COOKIE['PHPSESSID'];<br>// output: r2t5uvjq435r4q7ib3vtdjq120<br>session_start();<br>echo session_id();<br>// output: r2t5uvjq435r4q7ib3vtdjq120</font>

Referer

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

Wenn ich beispielsweise die Nettuts-Homepage besuche und auf einen Link klicke, werden diese Header-Informationen an den Browser gesendet:
<font face="NSimsun">Referer: http://net.tutsplus.com/ </font>

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

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

// Kommt der Surfer von Google?

if ($url_info['host'] == 'www.google.com') {

parse_str($url_info['query'], $vars);

echo „Sie haben bei Google nach diesem Schlüsselwort gesucht: „. google.com/search?source=ig&hl=en&rlz=&=&q=http headers&aq=f&oq=&aqi=g-p1g9

// Die Ausgabe lautet:

// Sie haben bei Google nach diesem Schlüsselwort gesucht: http Überschriften

<font face="NSimsun">Authorization: Basic bXl1c2VyOm15cGFzcw==</font>Vielleicht ist Ihnen aufgefallen, dass das Wort „Referrer“ falsch als „Referer“ geschrieben wurde. Leider wurde es so in die offiziellen HTTP-Spezifikationen aufgenommen und blieb hängen.

Autorisierung

Wenn für eine Seite eine Autorisierung erforderlich ist, öffnet der Browser ein Anmeldefenster. Nach Eingabe der richtigen Kontonummer sendet der Browser eine HTTP-Anfrage, diesmal jedoch mit folgendem Header:

Dieser Teil der im Header enthaltenen Informationen ist Base64-codiert. Beispielsweise wird base64_decode(‘bXl1c2VyOm15cGFzcw==’) in „myuser:mypass“ konvertiert.

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

Weitere Details erläutern wir im Abschnitt WWW-Authentifizieren. HTTP-Antwort in HTTP-Headern Lassen Sie mich nun die HTTP-Antwortinformationen in einigen gängigen HTTP-Headern verstehen. In PHP können Sie Header-Antwortinformationen über header() festlegen. PHP hat automatisch einige notwendige Header-Informationen gesendet, z. B. geladene Inhalte, gesetzte Cookies usw. Sie können über

headers_list()

sehen, was gesendet wurde und was gesendet wird Informationen zum Funktionsheader. Sie können auch die Funktion

headers_sent()

verwenden, um zu überprüfen, ob die Header-Informationen gesendet wurden.

<font face="NSimsun">Cache-Control: max-age=3600, public</font>Cache-Kontrolle

Die Definition von w3.org lautet: „Das Cache-Control-General-Header-Feld wird verwendet, um Anweisungen anzugeben, die von allen Caching-Mechanismen entlang der Anfrage-/Antwortkette befolgt werden MÜSSEN, wobei „Caching-Mechanismen“ einige Ihrer Dinge einschließt.“ Der ISP kann Gateway- und Proxy-Informationen verwenden.

Zum Beispiel:

<font face="NSimsun">Cache-Kontrolle: max-age=3600, öffentlich<code><font face="NSimsun">Cache-Control: no-cache </font>

„Öffentlich“ bedeutet, dass diese Antwort von jedem zwischengespeichert werden kann, und „max-age“ gibt die Anzahl der Sekunden an, die der Cache gültig ist. Wenn Sie das Zwischenspeichern Ihrer Website zulassen, werden Downloadzeit und Bandbreite erheblich reduziert und gleichzeitig die Ladegeschwindigkeit des Browsers verbessert. Sie können das Caching auch deaktivieren, indem Sie die „no-cache“-Anweisung festlegen: <font face="NSimsun">Cache-Kontrolle: kein Cache </font>

Weitere Informationen finden Sie unter

w3.org

<font face="NSimsun">Content-Type: text/html; charset=UTF-8</font>.

Inhaltstyp Dieser Header enthält den „Mime-Typ“ des Dokuments. Der Browser verwendet diesen Parameter, um zu entscheiden, wie das Dokument analysiert wird. Beispielsweise würde eine HTML-Seite (oder PHP-Seite mit HTML-Ausgabe) etwa Folgendes zurückgeben: <font face="NSimsun">Content-Type: text/html;charset=UTF-8</font>

„text“ ist der Dokumenttyp und „html“ ist der Dokumentuntertyp. Dieser Header enthält auch weitere Informationen, z. B. den Zeichensatz.

<font face="NSimsun">Content-Type: image/gif</font>

Wenn es sich um ein Bild handelt, wird diese Antwort gesendet:

<font face="NSimsun">Inhaltstyp: Bild/Gif</font> Der Browser kann entscheiden, ein externes Programm oder eine eigene Erweiterung zu verwenden, um das Dokument über den Mime-Typ zu öffnen. Das folgende Beispiel ruft Adobe Reader auf:

<font face="NSimsun">Content-Type: application/pdf</font>

Direkt laden, Apache ermittelt normalerweise automatisch den MIME-Typ des Dokuments und fügt dem Header entsprechende Informationen hinzu. Und die meisten Browser verfügen über ein gewisses Maß an Fehlertoleranz. Sie erkennen den Mime-Typ automatisch, wenn die Informationen nicht im Header bereitgestellt werden.

Eine Liste häufig verwendeter MIME-Typen finden Sie hier.

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

Content-Disposition

Dieser Header weist den Browser an, ein Datei-Download-Fenster zu öffnen, anstatt zu versuchen, den Inhalt der Antwort zu analysieren. Zum Beispiel:

<font face="NSimsun">Inhaltsdisposition: Dateiname="download.zip"<code><font face="NSimsun">Content-Disposition: attachment; filename="download.zip"</font>

Der Browser zeigt daraufhin ein Dialogfeld wie dieses an:

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

<font face="NSimsun">Content-Type: application/zip<br>Content-Disposition: filename="download.zip"<code><font face="NSimsun">Content-Type: application/zip<br>Content-Disposition: attachment; filename="download.zip"</font>

Inhaltslänge

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

<font face="NSimsun">Inhaltslänge: 89123<code><font face="NSimsun">Content-Length: 89123</font>

Diese Informationen sind für das Herunterladen von Dateien sehr nützlich. Deshalb kennt der Browser den Fortschritt des Downloads.

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

<font face="NSimsun">// es ist eine ZIP-Datei<br>header('Content-Type: application/zip');<br>// 1 Million Bytes (ca. 1 Megabyte) <br>header('Content-Length: 1000000');<br>// Laden Sie einen Download-Dialog und speichern Sie ihn als download.zip<br>header('Content-Disposition: attachment; filename="download .zip"');<br>// 1000 mal 1000 Byte Daten<br>for ($i = 0; $i <span style="WHITE- SPACE: pre"><code><font face="NSimsun">// it's a zip file<br>header('Content-Type: application/zip');<br>// 1 million bytes (about 1megabyte)<br>header('Content-Length: 1000000');<br>// load a download dialogue, and save it as download.zip<br>header('Content-Disposition: attachment; filename="download.zip"');<br>// 1000 times 1000 bytes of data<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span>echo str_repeat(".",1000);<br><span style="WHITE-SPACE: pre"></span>// sleep to slow down the download<br><span style="WHITE-SPACE: pre"></span>usleep(50000);<br>}</font>echo str_repeat(".",1000);

// Ruhezustand, um den Download zu verlangsamen

usleep(50000);
}

Das Ergebnis sieht so aus:

<font face="NSimsun">// it's a zip file<br>header('Content-Type: application/zip');<br>// the browser won't know the size<br>// header('Content-Length: 1000000');<br>// load a download dialogue, and save it as download.zip<br>header('Content-Disposition: attachment; filename="download.zip"');<br>// 1000 times 1000 bytes of data<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span>echo str_repeat(".",1000);<br><span style="WHITE-SPACE: pre"></span>// sleep to slow down the download<br><span style="WHITE-SPACE: pre"></span>usleep(50000);<br>}</font>Jetzt kommentiere ich den Content-Length-Header aus:

<font face="NSimsun">// es ist eine ZIP-Datei<br>header('Content-Type: application/zip');<br>// der Browser wird das nicht wissen size<br>// header('Content-Length: 1000000');<br>// Lade einen Download-Dialog und speichere ihn als download.zip<br>header('Content-Disposition: attachment; filename ="download.zip"');<br>// 1000 mal 1000 Byte Daten<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span></font>

echo str_repeat(".",1000);

// Ruhezustand, um den Download zu verlangsamen
/>usleep(50000);
}

Das Ergebnis sieht so aus:

Dieser Browser zeigt Ihnen nur an, wie viel heruntergeladen wurde, nicht jedoch, wie viel insgesamt heruntergeladen werden muss. Und der Fortschrittsbalken zeigt den Fortschritt nicht an. <font face="NSimsun">Etag: "pub1259380237;gz"</font>

Etag

Dies ist ein weiterer Header, der für das Caching generiert wird. Es wird so aussehen: <font face="NSimsun">Etag: "pub1259380237;gz"</font>

<font face="NSimsun">If-None-Match: "pub1259380237;gz"</font>

Der Server antwortet dem Browser möglicherweise zusammen mit jeder gesendeten Datei mit diesen Informationen. Der Wert kann das letzte Änderungsdatum, die Dateigröße oder die Dateiprüfsumme des Dokuments enthalten. Beim Durchsuchen wird es zusammen mit dem empfangenen Dokument zwischengespeichert. Wenn der Browser das nächste Mal dieselbe Datei erneut anfordert, sendet er die folgende HTTP-Anfrage:

<font face="NSimsun">If-None-Match: "pub1259380237;gz"<p></p></font>

Wenn der angeforderte Dokument-Etag-Wert damit übereinstimmt, sendet der Server einen 304-Statuscode anstelle von 2oo. und gibt keinen Inhalt zurück. Der Browser lädt nun die Datei aus dem Cache. <font face="NSimsun">Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT</font>

Zuletzt geändert

<font face="NSimsun">$modify_time = filemtime($file);<br>header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");</font>Wie der Name schon sagt, geben diese Header-Informationen den Zeitpunkt der letzten Änderung des Dokuments im GMT-Format an:

<font face="NSimsun">Letzte Änderung: Sa, 28. November 2009 03:50:37 GMT</font>

<font face="NSimsun">$modify_time = filemtime($file);<br>header("Last-Modified: " . gmdate("D, d M Y H:i:s", $ changes_time) . " GMT");</font> Es bietet einen alternativen Caching-Mechanismus. Der Browser sendet möglicherweise eine Anfrage wie diese:

<font face="NSimsun">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</font>

Wir haben dies bereits im Abschnitt „If-Modified-Since“ besprochen.

Standort

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

<font face="NSimsun">HTTP/1.x 301 Moved Permanently<br>...<br>Location: http://net.tutsplus.com/<br>...</font>

In PHP können Sie Besucher auf diese Weise umleiten:
<font face="NSimsun">header('Location: http://net.tutsplus.com/');</font>

Standardmäßig wird der Statuscode 302 gesendet. Wenn Sie 301 senden möchten, schreiben Sie einfach so:

<font face="NSimsun">header('Location: http://net.tutsplus.com/', true, 301);</font>

Cookie setzen

Wenn eine Website Cookie-Informationen für Ihr Surfen festlegen oder aktualisieren muss, verwendet sie einen Header wie diesen:

<font face="NSimsun">Set-Cookie: skin=noskin; path=/; läuft ab=Sonntag, 29.11.2009 21:42:28 GMT<code><font face="NSimsun">Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT<br>Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT</font>Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; läuft ab=Sa. 27. Februar 2010 08:00:00 GMT

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

In PHP können Sie Cookies über die Funktion setcookie()

setzen, und PHP sendet die entsprechenden HTTP-Header.

<font face="NSimsun">setcookie("TestCookie", "foobar");</font><font face="NSimsun">setcookie("TestCookie", "foobar");</font>

Es werden Header-Informationen wie diese gesendet:

<font face="NSimsun">Set-Cookie: TestCookie=foobar</font><font face="NSimsun">Set-Cookie: TestCookie=foobar</font>

Wenn keine Ablaufzeit angegeben ist, wird das Cookie nach dem Schließen des Browsers gelöscht.

WWW-Authentifizieren

Eine Website kann diesen Header über HTTP senden, um den Benutzer zu authentifizieren. Wenn der Browser diese Antwort im Header sieht, öffnet er ein Popup-Fenster.

<font face="NSimsun">WWW-Authenticate: Basic realm="Restricted Area"</font><font face="NSimsun">WWW-Authenticate: Basic realm="Restricted Area"</font>

Es wird so aussehen:

Im Kapitel des

PHP-Handbuchs gibt es einen einfachen Code, der zeigt, wie man so etwas mit PHP macht:

<font face="NSimsun">if (!isset($_SERVER['PHP_AUTH_USER'])) {<br>header('WWW-Authenticate: Basic realm="My Realm"');<br>header('HTTP/1.0 Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten Unauthorized');<br>echo 'Text to send if user hits Cancel button';<br>exit;<br>} else {<br>echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";<br>echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";<br>}</font><font face="NSimsun">if (!isset($_SERVER['PHP_AUTH_USER'])) {</font>

header('WWW-Authenticate: Basic realm="My Realm"');

header('HTTP/1.0 Verstehen Sie alle Aspekte der Erstellung von HTTP-Headern, Bild- und Textbeschreibungen_HTML/Xhtml_Webseiten Unauthorized');

echo 'Text zum Senden, wenn der Benutzer auf die Schaltfläche Abbrechen klickt';

exit;

} else {

echo "

Hallo { $_SERVER['PHP_AUTH_USER']}.

";<font face="NSimsun">Content-Encoding: gzip</font>echo "

Sie haben {$_SERVER['PHP_AUTH_PW']} als Ihr Passwort eingegeben.

"; }

Inhaltskodierung Dieser Header wird normalerweise gesetzt, wenn der zurückgegebene Inhalt komprimiert wird.

<font face="NSimsun">Inhaltskodierung: gzip</font>

Wenn Sie in PHP die Funktion

ob_gzhandler() aufrufen, wird dieser Header automatisch gesetzt.

Ursprüngliche Adresse: http://css9.net/all-about-http-headers/
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn