Was sind HTTP-HeaderHTTP 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: Nachdem die Anfrage abgeschlossen ist, erhält Ihr Browser möglicherweise die folgende HTTP-Antwort: 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 anDie folgenden Firefox-Erweiterungen können Ihnen bei der Analyse von HTTP-Headern helfen: 1. Feuerwanze 2. Live-HTTP-Header 3. In PHP:
Unter dem Artikel sehen Sie einige Beispiele mit PHP. HTTP-AnforderungsstrukturDie erste Zeile, „erste Zeile“ genannt, besteht aus drei Teilen:
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: Und Sie erhalten weiterhin eine gültige Antwort vom Server. AnfragetypDie 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 abrufenDie 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: Sobald das HTML geladen ist, sendet der Browser eine GET-Anfrage zum Abrufen des Bildes, etwa so: Formulare können auch per GET-Methode versendet werden. Hier ein Beispiel: Wenn dieses Formular abgeschickt wird, sieht die HTTP-Anfrage folgendermaßen aus: Sie können Formulareingaben an den Server senden, indem Sie sie an die Abfragezeichenfolge anhängen. POST: Daten an den Server sendenObwohl 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: Beim Absenden dieses Formulars wird eine HTTP-Anfrage wie diese erstellt: Dabei sind drei Dinge zu beachten:
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 empfangenHEAD 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-AntwortstrukturWenn 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 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 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: Beachten Sie, dass dies nur eine passwortgeschützte Seite ist und das Popup-Fenster zur Passwortabfrage folgendermaßen aussieht: 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. 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-HeadernSehen 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. GastgeberEine 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. 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 Dieser Header kann die folgenden Informationen enthalten:
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. Akzeptieren-Sprache 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. Accept-Kodierung 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. Wenn geändert seitWenn 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: 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. 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ätzchenWie der Name schon sagt, werden die in Ihrem Browser gespeicherten Cookie-Informationen an den Server gesendet. 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. ReferrerWie 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: In PHP kann dieser Wert über $_SERVER['HTTP_REFERER'] abgerufen werden. 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. GenehmigungWenn 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: 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-HeadernLassen 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-Steuerungw3.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: „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: Weitere Einzelheiten finden Sie unter w3.org . InhaltstypDieser 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: „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: 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: 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. InhaltsdispositionDieser Header weist den Browser an, ein Fenster zum Herunterladen von Dateien zu öffnen, anstatt zu versuchen, den Inhalt der Antwort zu analysieren. Zum Beispiel: Daraufhin zeigt der Browser ein Dialogfeld wie das folgende an: Beachten Sie, dass auch der entsprechende Content-Type-Header gesendet wird. InhaltslängeWenn 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. 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. Das Ergebnis wird ungefähr so aussehen: Nun kommentiere ich den Content-Length-Header aus: 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. EtagDies ist ein weiterer Header, der für Caching-Zwecke generiert wird. Es wird so aussehen: 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: 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ändertWie der Name schon sagt, gibt dieser Header den Zeitpunkt der letzten Änderung des Dokuments im GMT-Format an: Es bietet einen weiteren Caching-Mechanismus. Ein Browser könnte eine Anfrage wie diese senden: Dies haben wir bereits im Abschnitt „If-Modified-Since“ besprochen. StandortDieser 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: In PHP können Sie Besucher folgendermaßen umleiten: Standardmäßig wird ein Statuscode 302 gesendet. Wenn Sie einen 301 senden möchten, schreiben Sie Folgendes: Cookie setzenWenn eine Website Cookies für Ihren Browserverlauf setzen oder aktualisieren muss, verwendet sie einen Header wie diesen: 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. Es werden die folgenden Header gesendet: Ist kein Ablaufdatum angegeben, wird das Cookie beim Schließen des Browsers gelöscht. WWW-AuthentifizierungEine 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. Es wird ungefähr so aussehen: In einem Kapitel des PHP-Handbuchs gibt es einen einfachen Code, der zeigt, wie dies mit PHP funktioniert: InhaltskodierungDieser Header wird normalerweise gesetzt, wenn der Rückgabeinhalt komprimiert wird. In PHP wird dieser Header automatisch gesetzt, wenn Sie die Funktion ob_gzhandler() aufrufen. Original-URL: http://css9.net/all-about-http-headers/ |
>>: Reine JS-Methode zum Exportieren von Tabellen nach Excel
Die Betriebsumgebung dieses Tutorials: Windows 7-...
SQL-Anweisungen (Structured Query Language), also...
Seit ich den Mac zurückgegeben habe, liegt mein u...
Inhaltsverzeichnis Vorwort 1. Erstellen Sie Objek...
1. Radiogruppierung Solange der Name gleich ist, h...
Ein Problem, auf das Frontend-Entwickler häufig s...
In diesem Artikelbeispiel wird der spezifische Ja...
Ich habe viele Websites gefunden, die Dropdown- od...
Inhaltsverzeichnis Funktionsformat sofort ausführ...
Es gibt die folgenden vier häufig verwendeten Met...
Die Lösung für die Hintergrundkachelung oder Rahme...
Originaltext: https://dev.mysql.com/doc/refman/8....
Die Kenntnis der IP-Adresse eines Geräts ist wich...
Inhaltsverzeichnis Vorwort Parameter analysieren ...
Parallelitätsfunktionen Zeit für i in `grep serve...