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.
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-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-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
Pragma: no-cache
Cache-Control: no-cacheDie 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:
Transfer-Encoding: chunked
Datum: Sa, 28. November 2009 04:36:25 GMTServer: 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: gzipVary: 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
2.
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:
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>
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>
<font face="NSimsun">GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1</font>
<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>
<font face="NSimsun">GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1<br>...</font>
POST: Daten an den Server senden
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>
<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>
HEAD: Header-Informationen empfangen
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.
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.
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
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:
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:
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 HTTP-Anfrage in HTTP-HeadernAlle 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.
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.
<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:
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>
<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>
<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>
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.
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>
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']);
if ($url_info['host'] == 'www.google.com') {
parse_str($url_info['query'], $vars);// 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:
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>
<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.
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>
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);
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>
// 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>
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>
<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>
<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.
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>
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.
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:
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>
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/