Heim  >  Artikel  >  php教程  >  Tiefes Verständnis des HTTP-Protokolls

Tiefes Verständnis des HTTP-Protokolls

高洛峰
高洛峰Original
2016-12-12 11:14:432135Durchsuche

Detailliertes Verständnis des HTTP-Protokolls

1. Grundkonzepte

1.1 Einführung

HTTP ist die Abkürzung für Hyper Text Transfer Protocol. Seine Entwicklung ist das Ergebnis der Zusammenarbeit zwischen dem World Wide Web Consortium und der Internet Engineering Task Force (IETF), die schließlich eine Reihe von RFCs veröffentlichte, die die HTTP/1.0-Version definieren. Das bekannteste davon ist RFC 2616. RFC 2616 definiert eine heute häufig verwendete Version – HTTP 1.1.

HTTP-Protokoll (HyperText Transfer Protocol, Hypertext Transfer Protocol) ist ein Übertragungsprotokoll, das zur Übertragung von Hypertext vom WWW-Server an den lokalen Browser verwendet wird. Es kann den Browser effizienter machen und die Netzwerkübertragung reduzieren. Es stellt nicht nur sicher, dass der Computer Hypertextdokumente korrekt und schnell überträgt, sondern bestimmt auch, welcher Teil des Dokuments übertragen wird und welcher Teil des Inhalts zuerst angezeigt wird (z. B. Text vor Grafiken) usw.

HTTP ist ein Protokoll der Anwendungsschicht, das aus Anfragen und Antworten besteht und ein Standard-Client-Server-Modell ist. HTTP ist ein zustandsloses Protokoll.

1.2 Position im TCP/IP-Protokollstapel

Das HTTP-Protokoll wird normalerweise über dem TCP-Protokoll und manchmal auf der TLS- oder SSL-Protokollebene übertragen Wir sprechen oft über HTTPS. Wie in der folgenden Abbildung dargestellt:

Tiefes Verständnis des HTTP-Protokolls

Die Standard-HTTP-Portnummer ist 80 und die HTTPS-Portnummer ist 443.

1.3 HTTP-Request-Response-Modell

Das HTTP-Protokoll initiiert immer eine Anfrage vom Client und sendet eine Antwort vom Server zurück. Siehe das Bild unten:

Tiefes Verständnis des HTTP-Protokolls

Dies schränkt die Verwendung des HTTP-Protokolls ein und es ist für den Server unmöglich, Nachrichten an den Client zu senden, wenn der Client keine Anfrage initiiert .

Das HTTP-Protokoll ist ein zustandsloses Protokoll. Es gibt keine Übereinstimmung zwischen dieser Anfrage und der letzten Anfrage desselben Clients.

1.4 Arbeitsablauf

Eine HTTP-Operation wird als Transaktion bezeichnet und ihr Arbeitsprozess kann in vier Schritte unterteilt werden:

1) Zuerst der Client und der Server Es muss eine Verbindung hergestellt werden. Klicken Sie einfach auf einen Hyperlink und die Arbeit von HTTP beginnt.

2) Nach dem Herstellen der Verbindung sendet der Client eine Anfrage an den Server. Das Format der Anfrage ist: Uniform Resource Identifier (URL), Protokollversionsnummer, gefolgt von MIME-Informationen einschließlich Anfragemodifikatoren und Clientinformationen . und mögliche Inhalte.

3) Nach Erhalt der Anfrage gibt der Server entsprechende Antwortinformationen aus. Das Format ist eine Statuszeile, einschließlich der Protokollversionsnummer der Informationen, eines Erfolgs- oder Fehlercodes, gefolgt von MIME-Informationen einschließlich Serverinformationen und Entitäten.

4) Der Client empfängt die vom Server zurückgegebenen Informationen und zeigt sie über den Browser auf dem Display des Benutzers an. Anschließend trennt der Client die Verbindung zum Server.

Wenn in einem bestimmten Schritt des oben genannten Prozesses ein Fehler auftritt, wird die Fehlermeldung an den Client zurückgegeben und auf dem Bildschirm ausgegeben. Für den Benutzer werden diese Prozesse durch HTTP selbst erledigt. Der Benutzer muss nur mit der Maus klicken und warten, bis die Informationen angezeigt werden.

1.5 Verwenden Sie Wireshark, um TCP- und http-Pakete zu erfassen.

Öffnen Sie Wireshark, wählen Sie „Erfassen“ -> „Optionen“ in der Symbolleiste. Die Schnittstellenauswahl ist wie in Abbildung 1 dargestellt:

Tiefes Verständnis des HTTP-Protokolls

Allgemeine Leser müssen nur das obere Dropdown-Feld auswählen, das entsprechende Gerät auswählen und dann auf „Erfassungsfilter“ klicken. Die Auswahl hier ist „HTTP TCP-Port (80)“. . Klicken Sie nach der Auswahl im Bild oben auf „Start“, um mit der Paketerfassung zu beginnen.

Tiefes Verständnis des HTTP-Protokolls

Öffnen Sie beispielsweise http://image.baidu.com/ im Browser und erfassen Sie das Paket wie in Abbildung 3 dargestellt:
http: // www.blogjava.NET/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5 %bf %b5-3.jpg

Tiefes Verständnis des HTTP-Protokolls

Im Bild oben können Sie deutlich den Interaktionsprozess zwischen dem Client-Browser (IP ist 192.168.2.33) und dem Server sehen:

1) Nr. 1: Durchsuchen Der Server (192.168.2.33) sendet eine Verbindungsanfrage an den Server (220.181.50.118). Dies ist der erste Schritt des TCP-Drei-Wege-Handshakes. Es handelt sich um eine SYN-Anfrage (Seq.: 192.168.2.33), die zu diesem Zeitpunkt eine Bestätigung erfordert: SYN, ACK (Seq.: y). (y ist 0), ACK: x+1 (ist 1). Dies ist der zweite Schritt des Drei-Wege-Handshakes.

3) Nr. 3: Der Browser (192.168.2.33) hat dem Server (220.181.50.118) zur Bestätigung geantwortet und die Verbindung war erfolgreich. ist: ACK, zu diesem Zeitpunkt seq: x+1 (ist 1), ACK: y+1 (ist 1). Dies ist der dritte Schritt des Drei-Wege-Handshakes;

4) Nr. 4: Der Browser (192.168.2.33) sendet eine Seiten-HTTP-Anfrage; 50.118) bestätigt;

6) Nr. 6: Server (220.181.50.118) sendet Daten

7) Nr. 7: Client-Browser (192.168.2.33) bestätigt; Nr. 14: Der Client (192.168.2.33) sendet eine Bild-HTTP-Anfrage;

9) Nr. 15: Der Server (220.181.50.118) sendet den Statusantwortcode 200 OK

……

1.6 Header-Feld

Jedes Header-Feld besteht aus einem Domänennamen, einem Doppelpunkt (:) und einem Domänenwert. Bei Domänennamen wird die Groß-/Kleinschreibung nicht beachtet, bevor der Feldwert auf mehrere Zeilen erweitert werden kann, wobei am Anfang jeder Zeile mindestens ein Leerzeichen oder Tabulatorzeichen verwendet werden kann.

Klicken Sie im Paketerfassungsbild auf Nr. 14, um Abbildung 4 anzuzeigen:

http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5% 8d%8f%e8% ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-4.jpg

Die Antwortnachricht ist in Abbildung 5 dargestellt:

Tiefes Verständnis des HTTP-Protokolls

1.6.1 Host-Header-Feld

Host-Header-Feld gibt den Internet-Host und den Port der angeforderten Ressourcennummer an, die dargestellt werden müssen der Standort des Ursprungsservers oder Gateways der angeforderten URL. HTTP/1.1-Anfragen müssen das Host-Header-Feld enthalten, andernfalls gibt das System den Statuscode 400 zurück.

Tiefes Verständnis des HTTP-ProtokollsDas Verhalten des Hosts in Abbildung 5:

1.6.2 Referrer-Header-Feld

Das Referer-Header-Feld ermöglicht es dem Client, die Quelle anzugeben Ressourcenadresse der Anforderungs-URI, die es dem Server ermöglicht, eine Rollback-Liste zu generieren, die für die Anmeldung, Cache-Optimierung usw. verwendet werden kann. Darüber hinaus können unterbrochene oder fehlerhafte Verbindungen zu Wartungszwecken nachverfolgt werden. Wenn der angeforderte URI keine eigene URI-Adresse hat, kann der Referrer nicht gesendet werden. Wenn eine Teil-URI-Adresse angegeben wird, sollte diese Adresse eine relative Adresse sein.

In Abbildung 4 ist der Inhalt der Referer-Zeile:

1.6.3 User-Agent-Header-Feld

Der Inhalt des User-Agent-Header-Felds Agent-Header-Feld Enthält Informationen über den Benutzer, der die Anfrage gestellt hat.

In Abbildung 4 lautet der Inhalt der User-Agent-Zeile:

http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8 % ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-8.jpg

1.6.4 Cache- Control Das Header-Feld


Cache-Control gibt den Caching-Mechanismus an, gefolgt von Anfragen und Antworten. Durch das Festlegen von Cache-Control in einer Anforderungs- oder Antwortnachricht wird der Caching-Prozess während der Verarbeitung einer anderen Nachricht nicht geändert. Zu den Cache-Anweisungen während der Anfrage gehören „No-Cache“, „No-Store“, „Max-Age“, „Max-Stale“, „Min-Fresh“, „Only-If-Cached“ und zu den Anweisungen in der Antwortnachricht gehören „Public“, „Private“, „No-Cache“ und „No“. -store, no-transform, Must-revalidate, Proxy-revalidate, max-age.

Das Kopfzeilenfeld in Abbildung 5 ist:

1.6.5 Datumskopfzeilenfeld


Datumskopfzeilenfeld gibt die gesendete Nachricht an. Uhrzeit, Das Beschreibungsformat der Zeit wird durch RFC822 definiert. Beispiel: Datum:Mo,31Dez200104:25:57GMT. Die durch „Datum“ beschriebene Zeit stellt die Weltstandardzeit dar. Um sie in Ortszeit umzurechnen, müssen Sie die Zeitzone des Benutzers kennen.

In Abbildung 5 sieht das Header-Feld wie folgt aus:

1.7 Mehrere wichtige Konzepte von HTTP

1.7.1 Verbindung: Verbindung

Eine tatsächliche Zirkulation der Transportschicht, die zwischen zwei Anwendungen hergestellt wird, die miteinander kommunizieren.

In http1.1 kann ein Verbindungsheader in den Anforderungs- und Antwortheadern erscheinen. Die Bedeutung dieses Headers besteht darin, wie mit langen Links umgegangen wird, wenn Client und Server kommunizieren.

In http1.1 unterstützen Client und Server standardmäßig lange Links. Wenn der Client das http1.1-Protokoll verwendet, aber keine langen Links verwenden möchte, müssen Sie den Wert der Verbindung im Header angeben . close; wenn der Server keine langen Links unterstützen möchte, muss er in der Antwort auch klar angeben, dass der Wert „close“ lautet. Unabhängig davon, ob der Anforderungs- oder Antwortheader eine Verbindung mit dem Wert „close“ enthält, bedeutet dies, dass die aktuell verwendete TCP-Verbindung nach der Verarbeitung der Anforderung an diesem Tag getrennt wird. Künftig muss der Client bei einer neuen Anfrage einen neuen TCP-Link erstellen.

1.7.2 Nachricht: Nachricht

Die Grundeinheit der HTTP-Kommunikation, einschließlich einer strukturierten Sequenz von Acht-Tupeln, die über die Verbindung übertragen wird.

1.7.3 Anfrage: Anfrage

Eine Anfrageinformation vom Client an den Server umfasst die auf die Ressource angewendete Methode, die Kennung der Ressource und die Versionsnummer des Protokolls.

1.7.4 Antwort: Antwort

Eine vom Server zurückgegebene Nachricht, einschließlich der Versionsnummer des HTTP-Protokolls und des Status der Anfrage (z. B. „erfolgreich“ oder „nicht gefunden“). und der MIME-Typ des Dokuments.

1.7.5 Ressource: Ressource

Ein Netzwerkdatenobjekt oder -dienst, das durch einen URI identifiziert wird.

1.7.6 Entität: Entität

Eine spezielle Darstellungsmethode von Datenressourcen oder Reflexionen von Dienstressourcen, die in einer Anforderungs- oder Antwortnachricht enthalten sein können. Eine Entität umfasst Entitätsheaderinformationen und den eigenen Inhalt der Entität.

1.7.7 Client: Client

Eine Anwendung, die eine Verbindung aufbaut, um Anfragen zu senden.

1.7.8 Benutzeragent: UserAgent

Initialisiert einen anfragenden Client. Dabei handelt es sich um Browser, Editoren oder andere Benutzertools.

1.7.9 Server: Server

Eine Anwendung, die Verbindungen akzeptiert und Informationen zu Anfragen zurückgibt.

1.7.10 Ursprungsserver: Ursprungsserver

ist ein Server, auf dem sich eine bestimmte Ressource befinden oder erstellt werden kann.

1.7.11 Proxy: Proxy

Ein Zwischenprogramm, das als Server oder Client fungieren kann, um Anfragen für andere Clients einzurichten. Anfragen werden über mögliche Übersetzungen intern oder über andere Server weitergeleitet. Ein Proxy muss eine Anforderungsnachricht interpretieren und wenn möglich neu schreiben, bevor er sie sendet.

Proxys fungieren häufig als Portal für Clients durch Firewalls hindurch. Proxys können auch als Hilfsanwendung zur Bearbeitung von Anfragen über Protokolle dienen, die nicht vom Benutzeragenten ausgeführt werden.

1.7.12 Gateway: Gateway

Ein Server, der als Vermittler für andere Server fungiert. Im Gegensatz zu einem Proxy akzeptiert ein Gateway Anfragen, als ob es der Ursprungsserver für die angeforderte Ressource wäre; der anfragende Client weiß nicht, dass es sich um das Gateway handelt.

Ein Gateway fungiert häufig als serverseitiges Portal durch eine Firewall hindurch. Ein Gateway kann auch als Protokollübersetzer für den Zugriff auf Ressourcen fungieren, die in Nicht-HTTP-Systemen gespeichert sind.

1.7.13 Kanal: Tunnel

ist ein Vermittlungsprogramm, das als Relais zwischen zwei Verbindungen fungiert. Nach der Aktivierung wird der Kanal nicht als Teil der HTTP-Kommunikation betrachtet, obwohl der Kanal durch eine HTTP-Anfrage initiiert werden kann. Wenn beide Enden der weitergeleiteten Verbindung geschlossen werden, verschwindet der Kanal. Kanäle werden häufig verwendet, wenn ein Portal vorhanden sein muss oder wenn ein Vermittler den weitergeleiteten Datenverkehr nicht interpretieren kann.

1.7.14 Cache: Cache

lokale Speicherung von Antwortinformationen.

Anhang: Referenzmaterialien

"http_Baidu Encyclopedia": http://baike.baidu.com/view/9472.htm

"Ergebniskodierung und http Statusantwortcode“: http://blog.tieniu1980.cn/archives/377

„Analyse des Drei-Wege-Handshakes von TCP“:

http://cache.baidu.com/ c?m=9f65cb4a8c8507ed4fece763104c8c711923d030678197027fa3c215cc7905141130a8e5747e0d548d98297a5ae91e03f7f63772315477e3cacdd94cdbbdc42225d82c36734f844315c419d891007a9f34d507a9f916a2e1b065d2f48193864353bb15543897f1fb4d711edd1b86033093b1e94e022e67adec40728e2e605f983431c5508fe4&p=c6769a46c5820efd08e2973b42&user=baidu

《使用Wireshark来检测一次HTTP连接过程》:

http://blog.163.com/wangbo_tester/blog/static/12806792120098174162288/

"Mehrere wichtige Konzepte des http-Protokolls": http://nc.mofcom.gov.cn/news/10819972.html

"Die Rolle des Verbindungsheaders im http-Protokoll ":

http://blog.csdn.net/barfoo/archive/2008/06/05/2514667.aspx

2. Detaillierte Erklärung des Protokolls

2.1 HTTP-Vergleich von /1.0 und HTTP/1.1

RFC 1945 definiert die HTTP/1.0-Version und RFC 2616 definiert die HTTP/1.1-Version.

Der Autor stellt auf meinem Blog die Download-Adressen der chinesischen Versionen dieser beiden RFCs zur Verfügung.

RFC1945-Download-Adresse:

http://www.blogjava.Net/Files/amigoxie/RFC1945 (HTTP) Chinesische Version.rar

RFC2616-Download-Adresse:

http://www.blogjava.net/Files/amigoxie/RFC2616 (HTTP) Chinesische Version.rar

2.1.1 Herstellen einer Verbindung

HTTP/1.0 pro Anfrage A Es muss eine neue TCP-Verbindung hergestellt werden und die Verbindung kann nicht wiederverwendet werden. HTTP/1.1 Neue Anfragen können zusätzlich zur TCP-Verbindung gesendet werden, die durch die vorherige Anfrage hergestellt wurde, und die Verbindung kann wiederverwendet werden. Der Vorteil besteht darin, den Overhead des wiederholten TCP-Drei-Wege-Handshakes zu reduzieren und die Effizienz zu verbessern.

Hinweis: In derselben TCP-Verbindung müssen neue Anfragen warten, bis die letzte Anfrage eine Antwort erhält, bevor sie gesendet werden können.

2.1.2 Hostdomäne

HTTP1.1 hat eine zusätzliche Hostdomäne im Anforderungsnachrichtenheader, während HTTP1.0 diese Domäne nicht hat.

ZB:

GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org

Möglicherweise HTTP1.0 It Manchmal wird angenommen, dass die IP-Adresse beim Aufbau einer TCP-Verbindung angegeben wurde und sich auf dieser IP-Adresse nur ein Host befindet.

2.1.3 Datums- und Zeitstempel

(Empfangsrichtung)

Ob HTTP1.0 oder HTTP1.1, es muss in der Lage sein, die folgenden drei Datumsangaben zu analysieren /Zeitstempel:

Sonntag, 06. November 1994, 08:49:37 Uhr GMT; RFC 822, aktualisiert durch RFC 1123
Sonntag, 06. November 1994, 08:49:37 Uhr GMT, beobachtet von RFC 1036
So 6. November 08:49:37 1994 ; ANSI C's asctime()-Format

(Senderichtung)

HTTP1.0 erfordert das dritte asctime-Format Datum/Uhrzeit Stempel kann nicht generiert werden ;

HTTP1.1 erfordert, dass nur Datums-/Zeitstempel im RFC 1123 (ersten) Format generiert werden.

2.1.4 Statusantwortcode

Statusantwortcode 100 (Fortfahren) Die Verwendung des Statuscodes ermöglicht es dem Client, den Server mit dem Anforderungsheader zu testen, bevor er den Anforderungsnachrichtentext sendet, um zu sehen, was Der Server möchte den Anfragetext nicht empfangen, bevor er entschieden hat, ob er den Anfragetext senden möchte.

Der Client enthält

Expect: 100-continue

Nachdem der Server es gesehen hat und den Statuscode 100 (Fortfahren) zurückgibt, wird der Client fortfahren und den Anforderungstext senden . Dies ist nur in HTTP1.1 verfügbar.

Darüber hinaus fügt HTTP/1.1 auch 101, 203, 205 usw. Statusantwortcodes hinzu

2.1.5 Anforderungsmethode

HTTP1.1 fügt OPTIONS, PUT, LÖSCHEN, VERFOLGEN, VERBINDEN Sie diese Anforderungsmethoden.

Methode = "OPTIONS" ; Abschnitt 9.2

|

                                                                                 

                                                                                 🎜>

                                                                  1 Format der Anforderungsnachricht

Das Format der Anforderungsnachricht lautet wie folgt:

Anforderungszeile

Anforderungsheader|Entitätsheader

CRLF (carriage Rückzeilenvorschub)

Entitätsinhalt

Die „Anforderungszeile“ ist: Anforderungszeile = Methode [Leerzeichen] Anforderungs-URI [Leerzeichen] Versionsnummer [Eingabe und Zeilenvorschub]

Beispiel für eine Anforderungszeile:

Eg1:

GET /index.html HTTP/1.1

Eg2:

POST http://192.168.2.217 :8080/index.jsp HTTP/1.1

Beispiel für eine HTTP-Anforderungsnachricht:

GET /hello.htm HTTP/1.1

Akzeptieren: */*

Akzeptieren- Sprache: zh-cn

Accept-Encoding: gzip, deflate

If-Modified-Since: Mi, 17. Okt. 2007 02:15:55 GMT

If- None-Match: W/"158-1192587355000 "

User-Agent: Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1; SV1)

Host: 192.168.2.162:8080

Verbindung: Keep-Alive

2.2.2 Anfragemethode

HTTP-Anfragemethoden umfassen Folgendes:


q GET

q POST

q HEAD

q PUT

q DELETE


q OPTIONS

q TRACE

q CONNECT

2.3 HTTP-Antwortnachricht

2.3.1 Antwortnachrichtenformat

Das Format der HTTP-Antwortnachricht ist wie folgt:

Statuszeile

Allgemeiner Informationsheader|Antwortheader|Entitätsheader

CRLF

Entitätsinhalt

Unter ihnen: Statuszeile = Versionsnummer [Leerzeichen] Statuscode [Leerzeichen] Grund [Zeilenumbruch eingeben]

Status Zeilenbeispiel:

Eg1:

HTTP/1.0 200 OK

Eg2:

HTTP/1.1 400 Bad Request

HTTP-Antwort Beispiel für eine Nachricht:

HTTP/1.1 200 OK

ETag: W/"158-1192590101000"

Letzte Änderung: Mittwoch, 17. Okt. 2007 03:01:41 GMT

Inhaltstyp: text/html

Inhaltslänge: 158

Datum: Mi, 17. Okt. 2007 03:01:59 GMT

Server: Apache-Coyote/1.1

2.3.2 http-Status-Antwortcode

2.3.2.1 1**: Anfrage erhalten, Verarbeitung fortsetzen

100 – der Kunde muss weiterhin Anfragen stellen

101 – Der Kunde benötigt die Server zum Konvertieren der HTTP-Protokollversion entsprechend der Anfrage

2.3.2.2 2**: Der Vorgang wurde erfolgreich empfangen, analysiert und akzeptiert

200 – Die Transaktion ist erfolgreich
201 ——Fragen Sie nach der URL der neuen Datei

202——Akzeptieren und verarbeiten, aber die Verarbeitung ist nicht abgeschlossen

203——Rückgabeinformationen sind unsicher oder unvollständig

204 – – Die Anfrage wurde empfangen, aber die Rückgabeinformationen waren leer

205 – Der Server hat die Anfrage abgeschlossen und der Benutzeragent muss die aktuell durchsuchten Dateien zurücksetzen

206 – Der Server hat die Anfrage für einige Benutzer abgeschlossen. GET-Anfrage

2.3.2.3 3**: Eine weitere Verarbeitung ist erforderlich, um diese Anfrage abzuschließen

300 – Die angeforderte Ressource ist an mehreren Standorten verfügbar

301 – Löschen Sie die Anforderungsdaten

302 – Die Anforderungsdaten wurden an einer anderen Adresse gefunden

303— — Es wird empfohlen, dass Kunden andere URLs oder Zugriffsmethoden besuchen

304 – Der Client hat GET ausgeführt, aber die Datei hat sich nicht geändert

305 – Die angeforderte Ressource muss von der von angegebenen Adresse abgerufen werden der Server

306 – – Der in der vorherigen Version von HTTP verwendete Code wird in der aktuellen Version nicht mehr verwendet

307 – – Erklärung, dass die angeforderte Ressource vorübergehend gelöscht wird

2.3.2.4 4**: Die Anfrage enthielt eine falsche Syntax oder konnte nicht abgeschlossen werden

400 – Ungültige Anfrage, z. B. Syntaxfehler

401 – Nicht autorisiertes

HTTP 401.1 – Nicht autorisiert: Anmeldung fehlgeschlagen

HTTP 401.2 – Nicht autorisiert: Serverkonfigurationsproblem verursachte Anmeldefehler

HTTP 401.3 – ACL verbietet Zugriff auf Ressourcen

HTTP 401.4 – Nicht autorisiert: Autorisierung verweigert nach Filter

HTTP 401.5 – Nicht autorisiert: ISAPI- oder CGI-Autorisierung fehlgeschlagen

402 – Gültige ChargeTo-Header-Antwort beibehalten

403 – Zugriff verboten

HTTP 403.1-Zugriff Verboten: Kein ausführbarer Zugriff

HTTP 403.2 – Kein Zugriff: Kein Lesezugriff

HTTP 403.3 – Kein Zugriff: Kein Schreibzugriff

HTTP 403.4 – Kein Zugriff: SSL erforderlich

HTTP 403.5 – Verboten: Erfordert SSL 128

HTTP 403.6 – Verboten: IP-Adresse verweigert

HTTP 403.7 – Verboten: Client-Zertifikat erforderlich

HTTP 403.8 – Verboten: Site-Zugriff ist verboten

HTTP 403.9 – Verboten: Zu viele verbundene Benutzer

HTTP 403.10 – Verboten: Ungültige Konfiguration

HTTP 403.11 – Verbotener Zugriff: Passwort geändert

HTTP 403.12 – Verboten: Zugriff vom Mapper verweigert

HTTP 403.13 – Verboten: Client-Zertifikat wurde widerrufen

HTTP 403.15 – Verboten: Client Zu viele Zugriffsberechtigungen

HTTP 403.16 – Zugriff verboten: Das Client-Zertifikat ist nicht vertrauenswürdig oder ungültig

HTTP 403.17 – Zugriff verboten: Das Client-Zertifikat ist abgelaufen oder noch nicht gültig

404 – – Keine Datei, Abfrage oder URL gefunden

405 – Die vom Benutzer im Feld „Request-Line“ definierte Methode ist nicht zulässig

406 – Laut dem vom Benutzer gesendeten Accept-Drag ist die angeforderte Ressource nicht zugänglich

407 – Ähnlich wie bei 401 muss der Benutzer zunächst auf dem Proxyserver autorisiert werden

408 – Der Client hat die Anfrage nicht innerhalb der vom Benutzer angegebenen Zeit abgeschlossen

409 – Ja Aktueller Ressourcenstatus, Anfrage kann nicht abgeschlossen werden

410 – Diese Ressource existiert nicht mehr auf dem Server und es gibt keine weitere Referenzadresse

411 – Der Server lehnt die benutzerdefinierte Inhaltslänge ab Attributanforderung

412 – Ein oder mehrere Anforderungsheaderfelder sind in der aktuellen Anforderung falsch

413 – Die angeforderte Ressource ist größer als die vom Server zulässige Größe

414 – Die angeforderte Ressourcen-URL ist länger als die vom Server zulässige Länge

415 – Die angeforderte Ressource unterstützt das Anforderungselementformat nicht

416 – Die Anforderung enthält das Feld „Range Request Header“ und dort Es liegt kein Bereichsangabewert innerhalb des Ressourcenbereichs der aktuellen Anforderung vor, und die Anforderung enthält nicht das Anforderungsheaderfeld „If-Range“

417 – Der Server erfüllt nicht die im Anforderungsheaderfeld „Expect“ angegebenen Erwartungen. Wenn es sich um einen Proxyserver handelt, kann es sein, dass der Server der nächsten Ebene die Anforderungslänge nicht erfüllen kann.

2.3.2.5 5**: Der Server konnte keine vollständig gültige Anfrage ausführen

HTTP 500 – Interner Serverfehler

HTTP 500.100 – Interner Serverfehler – ASP-Fehler

HTTP 500-11 Server ausgefallen

HTTP 500-12 Anwendung neu gestartet

HTTP 500-13 – Server zu ausgelastet

HTTP 500-14 – Anwendung ungültig

HTTP 500-15 – Anforderung nicht zulässig global.asa

Fehler 501 – Nicht implementiert

HTTP 502 – Gateway-Fehler

2.4 Verwenden Sie den Telnet-HTTP-Test

Unter Windows können Sie das Befehlsfenster verwenden, um einfache http-Tests durchzuführen.

Geben Sie cmd ein, um das Befehlsfenster aufzurufen, geben Sie den folgenden Befehl in die Befehlszeile ein und drücken Sie die Eingabetaste:

telnet www.baidu.com 80

Drücken Sie dann „Strg+ ] " und drücken Sie dann die Eingabetaste, um die zurückgegebenen Ergebnisse wiederzugeben.

Beginnen Sie dann mit dem Senden von Anforderungsnachrichten. Senden Sie beispielsweise die folgende Anforderungsnachricht, um die Homepage-Nachricht von Baidu anzufordern. Das verwendete HTTP-Protokoll ist HTTP/1.1:

GET /index.html HTTP/1.1

Hinweis: Nachdem Sie die obige Meldung in das Befehlsfenster kopiert haben, müssen Sie zwei Wagenrücklauf- und Zeilenvorschubdrücke drücken, um die Antwortmeldung zu erhalten. Nach dem ersten Wagenrücklauf und Zeilenvorschub müssen Sie einen Wagenrücklauf und einen Zeilenvorschub eingeben der Befehl, der vom HTTP-Protokoll benötigt wird. Die zweite besteht darin, die Eingabe zu bestätigen und die Anfrage abzusenden.

Sie können sehen, dass eine 200 OK-Nachricht zurückgegeben wird, wie in der folgenden Abbildung dargestellt:

Tiefes Verständnis des HTTP-Protokolls

Dies ist zu sehen, wenn HTTP/1.1 verwendet wird , die Verbindung ist nicht in. Sie wird getrennt, nachdem die Anfrage abgeschlossen ist. Wenn HTTP1.0 verwendet wird, geben Sie im Befehlsfenster Folgendes ein:

GET /index.html HTTP/1.0

An dieser Stelle können Sie sehen, dass die Anfrage sofort nach ihrem Ende getrennt wird.

Leser können auch versuchen, Header-Domäneninformationen mitzubringen, wenn sie GET oder POST verwenden. Geben Sie beispielsweise die folgenden Informationen ein:

GET /index.html HTTP/1.1
Verbindung: schließen
Host: www.baidu.com

2.5 Gängige Anforderungsmethoden

Gängige Anforderungsmethoden sind GET und POST.

l GET-Methode: Wird in Form von Entitätsinformationen erhalten über die durch den Anforderungs-URI angegebene Ressource. Wenn es sich bei dem Anforderungs-URI nur um einen Datengenerierungsprozess handelt, wird in der Antwortentität schließlich die Ressource zurückgegeben, auf die das Ergebnis des Verarbeitungsprozesses verweist, und nicht die Beschreibung des Verarbeitungsprozesses.

l POST-Methode: Wird verwendet, um eine Anfrage an den Zielserver zu stellen und ihn dazu aufzufordern, die an die Anfrage angehängte Entität zu akzeptieren und sie als zusätzliches neues Unterelement der durch den Anfrage-URI in der angegebenen Ressource zu behandeln Anforderungswarteschlange. Post ist darauf ausgelegt, eine einheitliche Methode zu verwenden, um die folgenden Funktionen zu erreichen:

1: Interpretation vorhandener Ressourcen

2: Senden von Informationen an elektronische Bulletin Boards, Newsgroups und Mailinglisten oder ähnliche Diskussionsgruppen;

3: Datenblöcke einreichen

4: Erweitern Sie die Datenbank durch zusätzliche Operationen.

Wie aus der obigen Beschreibung hervorgeht, handelt es sich bei „Get“ um eine Anforderung an den Server. Bei „Post“ handelt es sich um eine Anforderung zur Übermittlung von Daten an den Server. Die zu übermittelnden Daten befinden sich in der Entität hinter dem Informationsheader .

Die GET- und POST-Methoden weisen die folgenden Unterschiede auf:

(1) Auf der Clientseite übermittelt die Get-Methode Daten über die URL, und die Daten können in der URL angezeigt werden Bei der POST-Methode werden die Daten in HTML Submit innerhalb von HEADER platziert.

(2) Die von GET übermittelten Daten können nur bis zu 1024 Byte groß sein, während POST diese Grenze nicht hat.

(3) Sicherheitsprobleme. Wie in (1) erwähnt, werden bei Verwendung von Get die Parameter in der Adressleiste angezeigt, Post jedoch nicht. Wenn es sich bei den Daten also um chinesische Daten und nicht vertrauliche Daten handelt, verwenden Sie get. Wenn die vom Benutzer eingegebenen Daten keine chinesischen Zeichen sind und vertrauliche Daten enthalten, ist es besser, post zu verwenden.

(4) Sicher und idempotent. Sicher bedeutet, dass die Operation dazu dient, Informationen abzurufen, anstatt sie zu ändern. Idempotent bedeutet, dass mehrere Anfragen an dieselbe URL dasselbe Ergebnis zurückgeben sollten. Die vollständige Definition ist nicht so streng, wie es scheint. Mit anderen Worten: GET-Anfragen sollten im Allgemeinen keine Nebenwirkungen haben. Grundsätzlich besteht das Ziel darin, dass ein Benutzer beim Öffnen eines Links sicher sein kann, dass sich die Ressource aus seiner Sicht nicht verändert hat. Beispielsweise wird die Titelseite einer Nachrichtenseite ständig aktualisiert. Obwohl die zweite Anfrage einen anderen Nachrichtenstapel zurückgibt, gilt der Vorgang dennoch als sicher und idempotent, da er immer die aktuellen Nachrichten zurückgibt. umgekehrt. POST-Anfragen sind nicht so einfach. POST stellt eine Anfrage dar, die eine Ressource auf dem Server ändern kann. Nehmen wir immer noch die Nachrichtenseite als Beispiel: Die Anmerkungen der Leser zum Artikel sollten über POST-Anfragen implementiert werden, da sich die Website nach der Übermittlung der Anmerkung unterscheidet (z. B. wird eine Anmerkung unter dem Artikel angezeigt).

2.6 Anforderungsheader

Die häufigsten HTTP-Anforderungsheader sind wie folgt:

l Akzeptieren: MIME-Typ, der für den Browser akzeptabel ist; l Accept-Charset: Der für den Browser akzeptable Zeichensatz. l           Accept-Encoding: Die Datenkodierungsmethode, die der Browser dekodieren kann, z. Servlets können gzip-codierte HTML-Seiten an Browser zurückgeben, die gzip unterstützen. In vielen Fällen kann dies die Downloadzeit um das Fünf- bis Zehnfache reduzieren;

l Accept-Language: Der vom Browser gewünschte Sprachtyp, der verwendet wird, wenn der Server mehr als eine Sprachversion bereitstellen kann;

l Autorisierung: Autorisierungsinformationen, erscheinen normalerweise in der Antwort auf den vom Server gesendeten WWW-Authenticate-Header

l Verbindung: Gibt an, ob eine dauerhafte Verbindung erforderlich ist. Wenn das Servlet den Wert hier als „Keep-Alive“ sieht oder erkennt, dass die Anfrage HTTP 1.1 verwendet (HTTP 1.1 stellt standardmäßig dauerhafte Verbindungen her), kann es dauerhafte Verbindungen nutzen, wenn die Seite mehrere Elemente enthält (z. B. Applet, Bild), wodurch sich die für den Download erforderliche Zeit erheblich verkürzt. Um dies zu erreichen, muss das Servlet einen Content-Length-Header in der Antwort senden. Die einfachste Implementierungsmethode ist: Schreiben Sie zuerst den Inhalt in ByteArrayOutputStream und berechnen Sie dann seine Größe, bevor Sie den Inhalt offiziell schreiben -Länge: Gibt die Länge des Anfragenachrichtentextes an;

l Cookie: Dies ist eine der wichtigsten Informationen im Anfrageheader.

l Von: Die E-Mail-Adresse des Anfragesenders, bestehend aus Von einigen speziellen Web-Client-Programmen wird der Browser sie nicht verwenden

l Host: Der Host und Port in der ursprünglichen URL

l If-Modified-Since: Gibt den angeforderten Inhalt nur zurück, wenn er nach dem angegebenen Datum geändert wurde, andernfalls wird 304 „Not Modified“ zurückgegeben. "Antwort;

l Pragma: Die Angabe eines „no-cache“-Werts bedeutet, dass der Server ein aktualisiertes Dokument zurückgeben muss, auch wenn es sich um einen Proxyserver handelt und bereits eine lokale Kopie der Seite hat;

l Referrer: Enthält eine URL, von der aus der Benutzer auf die aktuell angeforderte Seite zugreift.

l User-Agent: Browsertyp, dieser Wert ist sehr nützlich, wenn der vom Servlet zurückgegebene Inhalt mit dem Browsertyp zusammenhängt

l UA-Pixel, UA-Color, UA-; Betriebssystem, UA-CPU: Ein nicht standardmäßiger Anforderungsheader, der von einigen Versionen des IE-Browsers gesendet wird und Bildschirmgröße, Farbtiefe, Betriebssystem und CPU-Typ angibt.

2.7 Antwortheader

Die häufigsten Antwortheader von HTTP sind wie folgt:

l Zulassen: Welche Anforderungsmethoden vom Server unterstützt werden (wie GET, POST, usw.);

l   Content-Encoding: Die Kodierungsmethode (Encode) des Dokuments. Erst nach der Dekodierung kann der durch den Content-Type-Header angegebene Inhaltstyp abgerufen werden. Durch die Verwendung von gzip zum Komprimieren von Dokumenten kann die Downloadzeit von HTML-Dokumenten erheblich verkürzt werden. GZIPOutputStream von Java kann problemlos eine GZIP-Komprimierung durchführen, wird jedoch nur von Netscape unter Unix und IE 4 und IE 5 unter Windows unterstützt. Daher sollte das Servlet prüfen, ob der Browser gzip unterstützt, indem es sich den Accept-Encoding-Header ansieht (d. h. request.getHeader("Accept-Encoding")), eine gzip-komprimierte HTML-Seite für Browser zurückgeben, die gzip unterstützen, und eine normale zurückgeben HTML-Seite für andere Browser. Seite;

l Inhaltslänge: Gibt die Inhaltslänge an. Diese Daten werden nur benötigt, wenn der Browser persistente HTTP-Verbindungen verwendet. Wenn Sie dauerhafte Verbindungen nutzen möchten, können Sie das Ausgabedokument in ByteArrayOutputStream schreiben, nach Abschluss seine Größe überprüfen, dann den Wert in den Content-Length-Header einfügen und den Inhalt schließlich über byteArrayStream.writeTo(response.getOutputStream( );

l Content-Type: Gibt an, zu welchem ​​MIME-Typ das folgende Dokument standardmäßig text/plain ist, es muss jedoch normalerweise explizit als text/html angegeben werden , HttpServletResponse stellt eine dedizierte Methode setContentTyep bereit. Die Entsprechung zwischen der Erweiterung und dem MIME-Typ kann in der Datei web.xml konfiguriert werden.

l Datum: Die aktuelle GMT-Zeit Vermeiden Sie die Konvertierung des Zeitformats. Der -Since-Anforderungsheader wird als bedingtes GET behandelt. Andernfalls wird ein 304 (Nicht geändert) zurückgegeben ) Der Status wird auch durch die setDateHeader-Methode zurückgegeben. ;

l Standort: Gibt an, wohin der Kunde gehen soll, um das Dokument abzurufen. Der Standort wird normalerweise nicht direkt, sondern über die sendRedirect-Methode festgelegt HttpServletResponse, das auch den Statuscode auf 302 setzt;

l Refresh: Gibt die Zeit in Sekunden an, nach der der Browser das Dokument aktualisieren soll. Zusätzlich zum Aktualisieren des aktuellen Dokuments können Sie auch setHeader( durchsuchen. „Refresh“, „5; URL=http://host/path“). Beachten Sie, dass diese Funktion normalerweise durch Setzen von im HEAD-Bereich der HTML-Seite. Dies liegt daran, dass die automatische Aktualisierung oder Umleitung für HTML-Autoren, die kein CGI oder Servlets verwenden können, sehr wichtig ist. Für Servlets ist dies jedoch sehr wichtig Es ist bequemer, den Refresh-Header direkt festzulegen. Beachten Sie, dass die Bedeutung von „Aktualisieren“ „Diese Seite aktualisieren oder auf die angegebene Seite nach N Sekunden zugreifen“ und nicht „Diese Seite aktualisieren oder auf die angegebene Seite alle N Sekunden zugreifen“ lautet. Daher erfordert die kontinuierliche Aktualisierung jedes Mal das Senden eines Refresh-Headers, und das Senden eines 204-Statuscodes kann dazu führen, dass der Browser nicht weiter aktualisiert wird, unabhängig davon, ob der Refresh-Header oder verwendet wird. Beachten Sie, dass der Refresh-Header nicht Teil der offiziellen HTTP 1.1-Spezifikation ist, sondern eine Erweiterung, die jedoch sowohl von Netscape als auch vom IE unterstützt wird.

2.8 Entitätsheader

Der Entitätsheader verwendet die Metainformationen des Entitätsinhalts, um die Attribute des Entitätsinhalts zu beschreiben, einschließlich Entitätsinformationstyp, Länge, Komprimierungsmethode, Zeitpunkt der letzten Änderung, und Datengültigkeit warten.

l Erlauben: GET,POST

l Inhaltskodierung: Die Kodierungsmethode (Encode) des Dokuments, zum Beispiel: gzip, siehe „2.5 Antwortheader“;

l Inhalt -Sprache: Der Sprachtyp des Inhalts, zum Beispiel: zh-cn; l Inhaltslänge: Gibt die Inhaltslänge an, z. B.: 80, siehe „2.5 Antwortheader“; 🎜>l Content-Location: Gibt an, wohin der Client gehen soll, um das Dokument abzurufen, zum Beispiel: http://www.dfdf.org/dfdf.html, siehe „2.5 Response Header“

l Content-MD5: Ein MD5-Digest der MD5-Entität, der als Prüfsumme verwendet wird. Sowohl der Sender als auch der Empfänger berechnen den MD5-Digest, und der Empfänger vergleicht seinen berechneten Wert mit dem in diesem Header übergebenen Wert. Beispiel 1: Inhalt-MD5: . Beispiel 2: dfdfdfdfdfdfdff==;

l Inhaltsbereich: Wird mit einigen Entitäten gesendet; gibt den niederwertigen und höherwertigen Byte-Offset des eingefügten Bytes an und gibt auch die Gesamtlänge dieser Entität an. Beispiel 1: Inhaltsbereich: 1001–2000/5000, Beispiel 2: Bytes 2543–4532/7898

l Inhaltstyp: Gibt den MIME-Typ der Entität an, die gesendet oder empfangen wird. Beispiel: text/html; charset=GB2312 Haupttyp/Untertyp;

l Läuft ab: 0 zeigt an, dass kein Caching erfolgt ist;

l Letzte Änderung des vom WEB berücksichtigten Objekts Server, zum Beispiel die letzte Änderungszeit der Datei, die letzte Generierungszeit der dynamischen Seite usw. Zum Beispiel: Letzte Änderung: Di, 06. Mai 2008 02:42:43 GMT.

2.8 Erweiterungsheader

In HTTP-Nachrichten können Sie auch einige Header verwenden, die nicht im enthalten sind Offizielle HTTP1.1-Spezifikation. Diese Headerfelder werden zusammenfassend als benutzerdefinierte HTTP-Header oder Erweiterungsheader bezeichnet und normalerweise als eine Art Entitätsheader behandelt.

Heutzutage unterstützen gängige Browser tatsächlich mehrere häufig verwendete Erweiterungs-Header-Felder wie Cookie, Set-Cookie, Refresh und Content-Disposition.

l Aktualisieren: 1;url=http://www.dfdf.org // Springe nach 1 Sekunde zum angegebenen Ort;

l Content-Disposition: Header-Feld, siehe „ 2.5 Response Header“;

l Content-Type: Der WEB-Server teilt dem Browser mit, auf welche Art von Objekt er antwortet.

eg1: Content-Type: application/xml;

eg2: application/octet-stream;

Content-Disposition: filename=aaa.zip.

Anhang: Referenzmaterialien

„Der Unterschied zwischen HTTP1.1 und HTTP1.0“:


http://blog.csdn.net/yanghehong/archive/2009/05/ 28 /4222594.aspx

"HTTP-Anfrage (der Unterschied zwischen GET und POST) und Antwort":

http://www.blogjava.net/honeybee/articles/164008.html

"Übersicht über HTTP-Anforderungsheader_Baidu weiß":


http://zhidao.baidu.com/question/32517427.html

"Entity-Header und Erweiterungsheader ":

http://www.cnblogs.com/tongzhiyong/archive/2008/03/16/1108776.html

3. Tiefgehendes Verständnis

3.1 Cookie und Sitzung

Cookies und Sitzungen werden beide zum Speichern von Statusinformationen verwendet und sind Mechanismen zum Speichern des Client-Status. Beides sind Versuche, das zustandslose Problem von HTTP zu lösen.

Sitzungen können mithilfe von Cookies oder dem URL-Writeback-Mechanismus implementiert werden. Eine mithilfe von Cookies implementierte Sitzung kann als eine fortgeschrittenere Anwendung von Cookies betrachtet werden.

3.1.1 Vergleich zwischen den beiden

Cookie und Session weisen die folgenden offensichtlichen Unterschiede auf:

1) Cookie speichert den Status auf dem Client und Session speichert den Status auf das Serverterminal;

2) Cookies sind kleine Textstücke, die vom Server auf dem lokalen Computer gespeichert und bei jeder Anfrage an denselben Server gesendet werden. Cookie wurde erstmals in RFC2109 implementiert und anschließend in RFC2965 erweitert. Der Webserver sendet Cookies mithilfe von HTTP-Headern an den Client. Auf dem Client-Terminal analysiert der Browser diese Cookies und speichert sie in einer lokalen Datei. Er hängt diese Cookies automatisch an jede Anfrage an denselben Server an. Die Sitzung ist im HTTP-Protokoll nicht definiert.

3) Die Sitzung ist für jeden Benutzer bestimmt. Der Wert der Variablen wird auf dem Server gespeichert Wird vom Benutzer festgelegt. Wenn der Client Cookies deaktiviert, kann dieser Wert auch so eingestellt werden, dass er an den Server zurückgegeben wird:

4) Aus Sicherheitsgründen: Wann Sie greifen über die Sitzungsseite auf eine Sitzung zu und erstellen ein Cookie auf Ihrem eigenen Computer. Es wird empfohlen, dass der SESSION-Mechanismus auf der Serverseite sicherer ist, da er die vom Kunden gespeicherten Informationen nicht willkürlich liest.

3.1.2 Sitzungsmechanismus

Der Sitzungsmechanismus ist ein serverseitiger Mechanismus. Der Server verwendet eine Struktur ähnlich einer Hash-Tabelle (oder verwendet möglicherweise eine Hash-Tabelle), um Informationen zu speichern.

Wenn das Programm eine Sitzung für die Anfrage eines Clients erstellen muss, prüft der Server zunächst, ob die Anfrage des Clients bereits eine Sitzungs-ID enthält – die sogenannte Sitzungs-ID. Wenn sie bereits eine Sitzungs-ID enthält, bedeutet dies, dass sie zuvor vorhanden war Der Client hat eine Sitzung erstellt, und der Server ruft die Sitzung entsprechend der Sitzungs-ID ab und verwendet sie (wenn sie nicht abgerufen werden kann, erstellt er möglicherweise eine neue Sitzung. Wenn die Client-Anfrage die Sitzungs-ID nicht enthält, wird eine Sitzung erstellt). Für den Client wird eine generierte Sitzungs-ID erstellt. Der Wert der Sitzungs-ID sollte eine Zeichenfolge sein, die weder wiederholt noch leicht zu fälschen ist. Diese Sitzungs-ID wird zurückgegeben den Client zur Speicherung in dieser Antwort.

3.1.6 Sitzungsimplementierung

3.1.6.1 Verwendung von Cookies zur Implementierung

Der Server weist jeder Sitzung eine eindeutige JSESSIONID zu und sendet sie über Cookie an den Client.

Wenn der Client eine neue Anfrage initiiert, trägt er diese JSESSIONID im Cookie-Header. Auf diese Weise kann der Server die dem Client entsprechende Sitzung finden.

Der Prozess ist in der folgenden Abbildung dargestellt:

Tiefes Verständnis des HTTP-Protokolls

3.1.6.2 URL-Echo verwenden, um zu erreichen

URL-Writeback bedeutet, dass der Server sendet Alle Links zur Browserseite tragen den Parameter JSESSIONID, sodass die JSESSIONID an den Server gesendet wird, wenn der Client auf einen Link klickt.

Wenn Sie die URL der Serverressource direkt in den Browser eingeben, um die Ressource anzufordern, wird die Sitzung nicht abgeglichen.

Die Tomcat-Implementierung von Session verwendet zu Beginn sowohl den Cookie- als auch den URL-Writeback-Mechanismus. Wenn festgestellt wird, dass der Client Cookie unterstützt, verwendet er weiterhin Cookie und beendet die Verwendung des URL-Writebacks. Wenn Sie feststellen, dass Cookies deaktiviert sind, verwenden Sie immer die URL-Rückschreibung. Wenn die JSP-Entwicklung eine Sitzung verarbeitet, denken Sie daran, „response.encodeURL()“ für Links auf der Seite zu verwenden.

3.1.3 Mehrere Situationen von Sitzungsfehlern in J2EE-Projekten

1) Sitzungszeitüberschreitung: Die Sitzung läuft innerhalb einer bestimmten Zeit ab, z. B. 30 Minuten. Wenn innerhalb von 30 Minuten keine Operation erfolgt Die Sitzung ist ungültig. Beispielsweise werden die folgenden Einstellungen in web.xml vorgenommen:



2) Verwendung session.invalidate(), um die Sitzung explizit zu entfernen.

3.1.4 Cookie-bezogene HTTP-Erweiterungsheader

1) Cookie: Der Client gibt das vom Server gesetzte Cookie an den Server zurück

2) Set-Cookie: Server setzt Cookie für den Client;

3) Cookie2 (RFC2965)): Der Client weist den Server an, die Version von Cookie zu unterstützen

4) Set-Cookie2 (RFC2965): Der Server setzt Cookie für den Client.

3.1.5 Cookie-Prozess

Der Server verwendet den Set-Cookie-Header in der Antwortnachricht, um den Cookie-Inhalt an den Client zurückzusenden, und der Client überträgt denselben Inhalt im Cookie ein neuer Anforderungsheader, der an den Server gesendet wird. Dadurch kann die Sitzung aufrechterhalten werden.

Der Prozess ist in der folgenden Abbildung dargestellt:

Tiefes Verständnis des HTTP-Protokolls3.2 Implementierungsprinzip des Caches

3.2.1 Was ist Web-Cache

WEB-Cache (Cache) befindet sich zwischen dem Webserver und dem Client.

Der Cache speichert eine Kopie des Ausgabeinhalts entsprechend der Anfrage, z. B. HTML-Seite, Bild, Datei. Wenn die nächste Anfrage eintrifft: Wenn es sich um dieselbe URL handelt, verwendet der Cache die Kopie direkt um auf die Zugriffsanfrage zu antworten, anstatt sie an die Quelle zu senden. Der Server sendet die Anfrage erneut.

Das HTTP-Protokoll definiert relevante Nachrichtenheader, damit das WEB-Caching so gut wie möglich funktioniert.

3.2.2 Vorteile des Cachings

q Reduzierte Antwortlatenz: Da Anfragen vom Cache-Server (näher am Client) und nicht vom Ursprungsserver beantwortet werden, nimmt dieser Prozess weniger Zeit in Anspruch Der Webserver scheint schneller zu reagieren.

q Reduzierter Netzwerkbandbreitenverbrauch: Durch die Wiederverwendung von Replikaten wird der Bandbreitenverbrauch des Clients reduziert; Kunden können Bandbreitenkosten sparen, das Wachstum des Bandbreitenbedarfs kontrollieren und die Verwaltung vereinfachen.

3.2.3 Nachrichtenheader der HTTP-Erweiterung im Zusammenhang mit dem Cache

q Läuft ab: Gibt die Zeit an, zu der der Antwortinhalt abläuft, Greenwich Mean Time GMT

q Cache-Kontrolle: Mehr Detaillierte Kontrolle des zwischengespeicherten Inhalts

q Zuletzt geändert: Der Zeitpunkt, zu dem die Ressource in der Antwort zuletzt geändert wurde

q ETag: Der Prüfwert der Ressource in der Antwort, der eindeutig ist für eine bestimmte Zeitspanne auf dem Server identifiziert.

q Datum: Serverzeit

q If-Modified-Since: Die Zeit, zu der die Ressource, auf die der Client zugreift, zuletzt geändert wurde, identisch mit „Last-Modified“.

q If-None-Match: Der Prüfwert der Ressource, auf die der Client zugreift, identisch mit ETag.

3.2.4 Allgemeine Prozesse, damit das Client-Caching wirksam wird

Wenn der Server die Anfrage empfängt, sendet er die Last-Modified- und ETag-Header der Ressource in 200OK und des Clients zurück speichert die Ressource im Cache und zeichnet diese beiden Attribute auf. Wenn der Client dieselbe Anfrage senden muss, enthält die Anfrage zwei Header: If-Modified-Since und If-None-Match. Die Werte der beiden Header sind die Werte der Last-Modified- und ETag-Header in der Antwort. Der Server stellt anhand dieser beiden Header fest, dass sich die lokale Ressource nicht geändert hat und der Client sie nicht erneut herunterladen muss, und gibt eine 304-Antwort zurück. Der allgemeine Prozess ist in der folgenden Abbildung dargestellt:

Tiefes Verständnis des HTTP-Protokolls

3.2.5 Web-Caching-Mechanismus

Der Zweck des Cachings in HTTP/1.1 besteht darin, das Senden von Anfragen zu reduzieren In vielen Fällen ist es möglicherweise nicht erforderlich, eine vollständige Antwort zu senden. Ersteres reduziert die Anzahl der Netzwerkschleifen; HTTP nutzt zu diesem Zweck einen „Ablauf“-Mechanismus. Letzteres reduziert die Bandbreite von Netzwerkanwendungen; HTTP nutzt zu diesem Zweck einen „Validierungs“-Mechanismus.

HTTP definiert 3 Caching-Mechanismen:

1) Aktualität: Ermöglicht die erneute Überprüfung einer Antwortnachricht auf dem Quellserver und kann vom Server und Client gesteuert werden. Beispielsweise gibt der Expires-Antwortheader die Zeit an, zu der ein Dokument nicht verfügbar war. Das Max-Age-Flag in Cache-Control gibt die maximale Cache-Zeit an;

2) Validierung: Wird verwendet, um zu überprüfen, ob eine zwischengespeicherte Antwort noch verfügbar ist. Wenn eine Antwort beispielsweise einen Last-Modified-Antwortheader hat, kann der Cache mithilfe von If-Modified-Since feststellen, ob er sich geändert hat, um so zu bestimmen, ob die Anfrage entsprechend der Situation gesendet werden soll 3) Invalidierung: Bei einer anderen Anfrage durch den Cache kommt es manchmal zu einem Nebeneffekt. Wenn beispielsweise eine URL mit einer zwischengespeicherten Antwort verknüpft ist, auf die jedoch POST-, PUT- und DELETE-Anfragen folgen, läuft der Cache ab.

3.3 Implementierungsprinzipien von Breakpoint Resume und Multi-Thread-Download

q Die GET-Methode des HTTP-Protokolls unterstützt die Anforderung nur eines bestimmten Teils einer Ressource;

q 206 Teilinhalt Teilweise Inhaltsantwort;

q Bereich der angeforderten Ressourcen;

q Wenn die Verbindung getrennt und wieder hergestellt wird, wird der Client nur nicht heruntergeladen Es wird ein Teil der Ressource angefordert, anstatt die gesamte Ressource erneut anzufordern, um eine Wiederaufnahme des Haltepunkts zu erreichen.

Ressourceninstanz blockieren:

EG1: Bereich: Bytes=306302-: Fordern Sie diese Ressource von 306302 Bytes bis zum Ende an;

EG2: Inhaltsbereich: Bytes 306302 -604047/604048: Die Antwort zeigt an, dass die Bytes 306302-604047 der Ressource übertragen werden und die Ressource insgesamt 604048 Bytes hat.

Der Client fordert dieselbe Ressource über gleichzeitige Anforderungen an Implementieren Sie das gleichzeitige geblockte Herunterladen einer bestimmten Ressource. Um den Zweck des schnellen Herunterladens zu erreichen. Die derzeit beliebten FlashGet und Thunder nutzen grundsätzlich dieses Prinzip.

Das Prinzip des Multithread-Downloads:

q Das Download-Tool öffnet mehrere Threads, die HTTP-Anfragen stellen

q Jede http-Anfrage fordert nur einen Teil der Ressourcendatei an : Inhaltsbereich: Bytes 20000-40000/47000;

q Von jedem Thread heruntergeladene Dateien zusammenführen.

3.4 https-Kommunikationsprozess

3.4.1 Was ist https?

HTTPS (vollständiger Name: Hypertext Transfer Protocol over Secure Socket Layer) ist ein HTTP-Kanal, der auf Sicherheit abzielt ist eine sichere Version von HTTP. Das heißt, die SSL-Schicht wird zu HTTP hinzugefügt. Die Sicherheitsgrundlage von HTTPS ist SSL. Einzelheiten zur Verschlüsselung finden Sie daher unter SSL.

Siehe das Bild unten:

Tiefes Verständnis des HTTP-Protokolls

Die von https verwendete Portnummer ist 443.

3.4.2 Implementierungsprinzip von https

Es gibt zwei grundlegende Arten von Verschlüsselungs- und Entschlüsselungsalgorithmen:

1) Symmetrische Verschlüsselung: Es gibt nur einen Schlüssel und die Verschlüsselung und Die Entschlüsselung erfolgt mit demselben Passwort und die Verschlüsselungs- und Entschlüsselungsgeschwindigkeit ist hoch.

2) Asymmetrische Verschlüsselung: Schlüssel erscheinen paarweise (und der private Schlüssel kann nicht abgeleitet werden). basierend auf dem öffentlichen Schlüssel, und der private Schlüssel kann nicht basierend auf dem privaten Schlüssel abgeleitet werden) Der öffentliche Schlüssel kann nicht abgeleitet werden), Verschlüsselung und Entschlüsselung verwenden unterschiedliche Schlüssel (Verschlüsselung mit öffentlichem Schlüssel erfordert Entschlüsselung mit privatem Schlüssel, Verschlüsselung mit privatem Schlüssel erfordert Entschlüsselung mit öffentlichem Schlüssel) , relativ symmetrische Verschlüsselung ist langsamer und typische asymmetrische Verschlüsselungsalgorithmen umfassen RSA, DSA usw.

Werfen wir einen Blick auf den Kommunikationsprozess von https:

Tiefes Verständnis des HTTP-Protokolls

Vorteile der https-Kommunikation:

1) Der von der generierte Schlüssel Client ist nur der Client Der Client und der Server können sie erhalten.

2) Die verschlüsselten Daten können vom Client und vom Server nur im Klartext abgerufen werden.

3) Die Kommunikation von Der Client zum Server ist sicher.

3.5 http-Proxy

3.5.1 http-Proxy-Server

Der vollständige englische Name des Proxy-Servers lautet Proxy Server und seine Funktion besteht darin, als Proxy für das Netzwerk zu fungieren Benutzer, um Netzwerkinformationen zu erhalten. Im übertragenen Sinne handelt es sich um eine Übergabestation für Netzwerkinformationen.

Ein Proxyserver ist ein Server zwischen dem Browser und dem Webserver. Dabei geht der Browser nicht direkt zum Webserver, um die Webseite abzurufen, sondern sendet eine Anfrage an den Proxyserver Wird zuerst an den Proxyserver gesendet, und der Proxyserver ruft die vom Browser benötigten Informationen ab und sendet sie an Ihren Browser.

Darüber hinaus verfügen die meisten Proxy-Server über eine Pufferfunktion. Sie verfügen über einen großen Speicherplatz. Er speichert kontinuierlich neu abgerufene Daten im eigenen Speicher in seinem lokalen Speicher und ist aktuell, ruft es die Daten nicht erneut vom Webserver ab, sondern überträgt die Daten im Speicher direkt an den Browser des Benutzers, was die Leistung des Browsers erheblich verbessern kann und Effizienz.

Noch wichtiger: Proxyserver (Proxyserver) ist eine wichtige Sicherheitsfunktion, die vom Internet-Link-Level-Gateway bereitgestellt wird. Er funktioniert hauptsächlich in der Konversationsschicht des Open System Interconnection (OSI)-Modells.

3.5.2 Die Hauptfunktionen des http-Proxyservers

Die Hauptfunktionen sind wie folgt:

1) Durchbrechen Sie Ihre eigenen IP-Zugriffsbeschränkungen und greifen Sie auf fremde Websites zu. Beispiel: Internetnutzer wie Education Network und 169 Network können über Proxys auf ausländische Websites zugreifen

2) Auf interne Ressourcen einiger Einheiten oder Gruppen zugreifen, z. B. FTP einer Universität (vorausgesetzt, die Proxy-Adresse liegt innerhalb). (der zulässige Zugriffsbereich der Ressource) Innerhalb) Mit dem kostenlosen Proxyserver im Adresssegment des Bildungsnetzwerks können Sie ihn für verschiedene FTP-Downloads und -Uploads öffnen, die für das Bildungsnetzwerk geöffnet sind, sowie für verschiedene Datenabfrage- und Freigabedienste ;

3) Durchbrechen Sie die IP-Blockierung von China Telecom: Benutzer von China Telecom haben den Zugriff auf viele Websites eingeschränkt und verschiedene Server blockieren Adressen unterschiedlich. Wenn Sie also nicht darauf zugreifen können, können Sie es mit einem ausländischen Proxyserver versuchen.

4) Verbessern Sie die Zugriffsgeschwindigkeit: Normalerweise richten Proxyserver einen größeren Festplattenpuffer ein Wenn andere Benutzer erneut auf dieselben Informationen zugreifen, werden die Informationen direkt aus dem Puffer entnommen und an den Benutzer weitergeleitet, um die Zugriffsgeschwindigkeit zu verbessern.

5) Verstecken Sie die echte IP: Internetbenutzer können auch verwendet werden Mit dieser Methode können Sie Ihre IP verbergen und sich vor Angriffen schützen.

3.5.3 HTTP-Proxy-Symbol

Das HTTP-Proxy-Symbol wird unten angezeigt:

Tiefes Verständnis des HTTP-Protokolls

Für den Client-Browser entspricht der HTTP-Proxyserver dem Server.

Für den Webserver übernimmt der http-Proxyserver die Rolle des Clients.

3.6 Implementierung eines virtuellen Hosts

3.6.1 Was ist ein virtueller Host?

Virtueller Host: Es dient dazu, Benutzern eine bestimmte Menge an Speicherplatz auf dem Netzwerkserver zuzuweisen Zum Platzieren von Sites und Anwendungskomponenten usw. werden die erforderlichen Site-Funktionen sowie Funktionen zur Datenspeicherung und -übertragung bereitgestellt.

Der sogenannte virtuelle Host, auch „Website-Bereich“ genannt, besteht darin, einen im Internet laufenden Server in mehrere „virtuelle“ Server aufzuteilen. Jeder virtuelle Host verfügt über einen unabhängigen Domänennamen und einen vollständigen Internet-Server. (Unterstützt WWW-, FTP-, E-Mail- usw.) Funktionen. Verschiedene virtuelle Hosts auf einem Server sind unabhängig und werden vom Benutzer verwaltet. Ein Server-Host kann jedoch nur eine bestimmte Anzahl virtueller Hosts unterstützen. Wenn diese Anzahl überschritten wird, kommt es zu einem starken Leistungsabfall.

3.6.2 Implementierungsprinzip des virtuellen Hosts

Virtual Host ist eine Technologie, die denselben WEB-Server verwendet, um Dienste für Websites mit unterschiedlichen Domainnamen bereitzustellen. Apache, Tomcat usw. können diese Funktion durch Konfiguration realisieren.

Relevanter HTTP-Nachrichtenheader: Host.

Zum Beispiel: Host: www.baidu.com

Wenn der Client eine HTTP-Anfrage sendet, enthält dieser den Host-Header. Der Host-Header zeichnet den vom Client eingegebenen Domänennamen auf. Auf diese Weise kann der Server anhand des Host-Headers bestätigen, auf welchen Domänennamen der Client zugreifen möchte.

Anhang: Referenzmaterialien

„Cookie- und Sitzungsmechanismus verstehen“:

http://sumongh.javaeye.com/blog/82498

《 Eine kurze Analyse des HTTP-Protokolls“:

http://203.208.39.132/search?q=cache:CdXly_88gjIJ:www.cnblogs.com/gpcuster/archive/2009/05/25/1488749.html+ http% E5%8D%8F%E8%AE%AE+web%E7%BC%93%E5%AD%98&cd=27&hl=zh-CN&ct=clnk&gl=cn&st_usg=ALhdy2-vzOcP8XTG1h7lcRr2GJrkTbH2Cg

《http Proxy_Baidu Enzyklopädie》:

http://baike.baidu.com/view/1159398.htm

《Virtual Host_Baidu Enzyklopädie》:

http://baike. com/view/7383.htm

《https_Baidu Encyclopedia》:


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