Anwendungsprotokoll für verteilte, zusammenarbeitende Hypermedien-Informationssysteme
Internationaler Standard | RFC 7230 |
---|---|
Entwickelt von | anfänglich CERN; IETF, W3C |
Eingeführt | 1991 |
Ersetzt durch | HTTP / 2 |
Das Hypertext Transfer Protocol HTTP ) ist ein Anwendungsprotokoll für verteilt , kollaborative Hypermedia-Informationssysteme. [1] HTTP ist die Grundlage der Datenkommunikation für das World Wide Web, wo Hypertext-Dokumente Hyperlinks zu anderen Ressourcen enthalten, auf die der Benutzer leicht zugreifen kann, beispielsweise durch einen Mausklick oder durch Tippen auf den Bildschirm. HTTP wurde entwickelt, um Hypertext und das World Wide Web zu erleichtern.
Die Entwicklung von HTTP wurde 1989 von Tim Berners-Lee am CERN initiiert. Die Entwicklung von HTTP-Standards wurde von der Internet Engineering Task Force (IETF) und dem World Wide Web Consortium (W3C) koordiniert, was zur Veröffentlichung einer Serie führte von Requests for Comments (RFCs). Die erste Definition von HTTP / 1.1, der allgemein verwendeten HTTP-Version, kam 1997 in RFC 2068 im Jahr 1997 vor, obwohl dies durch RFC 2616 im Jahr 1999 und dann erneut durch die RFC 7230-Familie überholt wurde von RFCs im Jahr 2014.
Eine spätere Version, der Nachfolger HTTP / 2, wurde 2015 standardisiert (und HTTP / 3 ist der vorgeschlagene Nachfolger (Internet Draft), der auf HTTP / 2 (19659015] aufbaut)) und wird jetzt von den wichtigsten Webservern unterstützt und Browser über TLS mit ALPN-Erweiterung [4] wo TLS 1.2 oder neuer erforderlich ist. [5]
Technischer Überblick [ edit ]
HTTP fungiert als Anforderungsantwortprotokoll im Client-Server-Rechenmodell. Ein Webbrowser kann beispielsweise der -Client sein, und eine Anwendung, die auf einem Computer ausgeführt wird, der eine Website hostet, kann der -Server sein. Der Client sendet eine HTTP -Anforderung an den Server. Der Server, der Ressourcen wie HTML-Dateien und andere Inhalte bereitstellt oder im Auftrag des Clients andere Funktionen ausführt, gibt eine -Antwort an den Client zurück. Die Antwort enthält Informationen zum Abschlussstatus der Anforderung und möglicherweise auch angeforderten Inhalt in ihrem Nachrichtentext.
Ein Webbrowser ist ein Beispiel eines Benutzeragenten (UA). Andere Arten von Benutzeragenten umfassen die Indexierungssoftware, die von Suchanbietern (Web-Crawlern), Sprachbrowsern, mobilen Apps und anderer Software verwendet wird, die auf Webinhalte zugreift, diese konsumiert oder anzeigt.
HTTP ermöglicht zwischengeschalteten Netzwerkelementen die Kommunikation zwischen Clients und Servern zu verbessern oder zu ermöglichen. Websites mit hohem Datenaufkommen profitieren oft von Web-Cacheservern, die Inhalte für Upstream-Server bereitstellen, um die Antwortzeit zu verbessern. Webbrowser zwischenspeichern zuvor aufgerufene Webressourcen und verwenden sie nach Möglichkeit wieder, um den Netzwerkverkehr zu reduzieren. HTTP-Proxyserver an privaten Netzwerkgrenzen können die Kommunikation für Clients ohne global routbare Adresse vereinfachen, indem Nachrichten an externe Server weitergeleitet werden.
HTTP ist ein Protokoll der Anwendungsschicht, das im Rahmen der Internet Protocol Suite entwickelt wurde. Seine Definition setzt ein zugrunde liegendes und zuverlässiges Transportschichtprotokoll voraus, [6] und das Transmission Control Protocol (TCP) wird häufig verwendet. HTTP kann jedoch so angepasst werden, dass unzuverlässige Protokolle wie das UDP (User Datagram Protocol) verwendet werden, beispielsweise in HTTPU und SSDP (Simple Service Discovery Protocol).
HTTP-Ressourcen werden über URL-Adressen (Uniform Resource Locators) unter Verwendung der URI-Schemata http und https identifiziert und im Netzwerk lokalisiert. URIs und Hyperlinks in HTML-Dokumenten bilden verknüpfte Hypertext-Dokumente.
HTTP / 1.1 ist eine Überarbeitung des ursprünglichen HTTP (HTTP / 1.0). In HTTP / 1.0 wird für jede Ressourcenanforderung eine separate Verbindung zum selben Server hergestellt. HTTP / 1.1 kann eine Verbindung mehrmals wiederverwenden, um Bilder, Skripts, Stylesheets, usw. herunterzuladen, nachdem die Seite ausgeliefert wurde. Die HTTP / 1.1-Kommunikation ist daher weniger latent, da der Aufbau von TCP-Verbindungen einen erheblichen Overhead verursacht.
History [ edit ]
Der Begriff Hypertext wurde 1965 von Ted Nelson im Xanadu-Projekt geprägt, das wiederum von Vannevar Bushs Vision der Mikrofilm-Informationen aus den 1930er Jahren inspiriert wurde Retrieval und Management "Memex" -System, beschrieben in seinem 1945 erschienenen Aufsatz "As We May Think". Tim Berners-Lee und sein Team am CERN haben das ursprüngliche HTTP zusammen mit HTML und der dazugehörigen Technologie für einen Webserver und einen textbasierten Webbrowser erfunden. Berners-Lee schlug 1989 erstmals das "WorldWideWeb" -Projekt vor - heute World Wide Web. Die erste Version des Protokolls hatte nur eine Methode, nämlich GET, die eine Seite von einem Server anfordert. [7] Die Antwort des Servers war immer eine HTML-Seite. [8]
The Die erste dokumentierte Version von HTTP war HTTP V0.9 (1991). Dave Raggett leitete 1995 die HTTP Working Group (HTTP WG) und wollte das Protokoll um erweiterte Operationen, erweiterte Verhandlungen, reichhaltigere Metainformationen und ein Sicherheitsprotokoll erweitern, das durch Hinzufügen zusätzlicher Methoden und Header-Felder effizienter wurde. [19659032] RFC 1945 hat HTTP V1.0 1996 offiziell eingeführt und anerkannt.
Die HTTP-WG plante im Dezember 1995 die Veröffentlichung neuer Standards [11] und die Unterstützung für den Vorstandard HTTP / 1.1 auf der Grundlage des damals in Entwicklung befindlichen RFC 2068 (HTTP-NG genannt) wurde rasch vom großen Browser übernommen Entwickler Anfang 1996. Im März dieses Jahres wurde der Prä-Standard HTTP / 1.1 in Arena, [12] Netscape 2.0, [12] Netscape Navigator Gold 2.01, [12] Mosaic 2.7, [Zitat benötigt ] Lynx 2.5, [ Zitat benötigt ] und in Internet Explorer 2.0. [ Zitat benötigt ] Ende- Die Akzeptanz der neuen Browser durch die Benutzer war schnell. Im März 1996 berichtete ein Webhosting-Unternehmen, dass über 40% der im Internet verwendeten Browser HTTP 1.1-konform waren. [ Zitat benötigt ] Dasselbe Webhosting-Unternehmen meldete dies bis Juni 1996 waren 65% aller Browser, die auf ihre Server zugreifen, HTTP / 1.1-konform. [13] Der HTTP / 1.1-Standard gemäß Definition in RFC 2068 wurde im Januar 1997 offiziell veröffentlicht. Verbesserungen und Aktualisierungen des HTTP / 1.1-Standards wurden veröffentlicht unter RFC 2616 im Juni 1999.
Im Jahr 2007 wurde die HTTPbis-Arbeitsgruppe gegründet, um die HTTP / 1.1-Spezifikation zu überarbeiten und zu klären. Im Juni 2014 veröffentlichte die WG eine aktualisierte, aus sechs Teilen bestehende Spezifikation (veraltet) RFC 2616:
- RFC 7230, HTTP / 1.1: Nachrichtensyntax und Routing
- RFC 7231, HTTP / 1.1: Semantik und Inhalt
- RFC 7232, HTTP / 1.1: Bedingte Anforderungen (19659049) RFC 7233, HTTP / 1.1: Bereichsanfragen
- RFC 7234, HTTP / 1.1: Zwischenspeichern
- RFC 7235, HTTP / 1.1: Authentifizierung
HTTP / 2 wurde veröffentlicht RFC 7540 im Mai 2015.
Jahr | HTTP-Version |
---|---|
1991 | 0,9 |
1996 | 1,0 |
1997 | 1.1 |
2015 | 2.0 |
2018 | 3.0 |
HTTP-Sitzung [ edit ]
Eine HTTP-Sitzung ist eine Sequenz von Netzwerk-Anfrage-Antwort-Transaktionen. Ein HTTP-Client initiiert eine Anforderung, indem er eine TCP-Verbindung (Transmission Control Protocol) zu einem bestimmten Port eines Servers herstellt (normalerweise Port 80, gelegentlich Port 8080; siehe Liste der TCP- und UDP-Portnummern). Ein HTTP-Server, der diesen Port überwacht, wartet auf die Anforderungsnachricht eines Clients. Nach Erhalt der Anforderung sendet der Server eine Statuszeile zurück, z. B. "HTTP / 1.1 200 OK", und eine eigene Nachricht. Der Hauptteil dieser Nachricht ist normalerweise die angeforderte Ressource, obwohl möglicherweise auch eine Fehlernachricht oder andere Informationen zurückgegeben werden. [1]
Persistente Verbindungen [ edit ]
In HTTP / 0.9 und 1.0 Die Verbindung wird nach einem einzigen Anforderungs- / Antwortpaar geschlossen. In HTTP / 1.1 wurde ein Keep-Alive-Mechanismus eingeführt, bei dem eine Verbindung für mehrere Anforderungen wiederverwendet werden konnte. Solche beständigen Verbindungen reduzieren die Anforderungswartezeit spürbar, da der Client die TCP-3-Way-Handshake-Verbindung nicht neu aushandeln muss, nachdem die erste Anforderung gesendet wurde. Ein weiterer positiver Nebeneffekt ist, dass die Verbindung im Allgemeinen aufgrund des langsamen TCP-Startmechanismus mit der Zeit schneller wird.
In Version 1.1 des Protokolls wurden Verbesserungen der Bandbreite für HTTP / 1.0 vorgenommen. Beispielsweise wurde in HTTP / 1.1 eine verschlüsselte Übertragungskodierung eingeführt, mit der Inhalte auf persistenten Verbindungen gestreamt und nicht gepuffert werden können. HTTP-Pipelining reduziert die Verzögerungszeit weiter, sodass Clients mehrere Anforderungen senden können, bevor sie auf jede Antwort warten. Eine weitere Erweiterung des Protokolls war das Byte-Serving, bei dem ein Server nur den Teil einer Ressource überträgt, der explizit von einem Client angefordert wurde.
HTTP-Sitzungsstatus [ edit ]
HTTP ist ein zustandsloses Protokoll. Bei einem Stateless-Protokoll muss der HTTP-Server nicht die Informationen oder den Status jedes Benutzers für die Dauer mehrerer Anforderungen aufbewahren. Einige Webanwendungen implementieren jedoch Zustände oder serverseitige Sitzungen, z. B. HTTP-Cookies oder versteckte Variablen in Webformularen.
HTTP-Authentifizierung [ edit ]
HTTP stellt mehrere Authentifizierungsschemata bereit, z. B. die Basiszugriffsauthentifizierung und die Digest-Zugriffsauthentifizierung, die über einen Challenge-Response-Mechanismus arbeiten, bei dem der Server eine Challenge identifiziert und ausgibt vor dem Servieren des angeforderten Inhalts.
HTTP bietet einen allgemeinen Rahmen für die Zugriffskontrolle und Authentifizierung über einen erweiterbaren Satz von Challenge-Response-Authentifizierungsschemata, der von einem Server zum Abfragen einer Clientanforderung und von einem Client zum Bereitstellen von Authentifizierungsinformationen verwendet werden kann. [14]
Authentifizierung realms [ edit ]
Die Spezifikation für die HTTP-Authentifizierung stellt auch ein beliebiges, implementierungsspezifisches Konstrukt für die weitere Aufteilung von Ressourcen bereit, die einem bestimmten Root-URI gemeinsam sind. Die Zeichenfolge für den Bereichswert (falls vorhanden) wird mit der kanonischen Root-URI kombiniert, um die Schutzbereichskomponente der Challenge zu bilden. Dadurch kann der Server unter einem einzigen Stamm-URI separate Authentifizierungsbereiche definieren. [14]
Nachrichtenformat [ edit ]
Client und Server kommunizieren durch Senden von Nur-Text-Nachrichten (ASCII) . Der Client sendet -Anfragen an den Server und der Server sendet Antworten .
Anforderungsnachricht [ edit ]
Die Anforderungsnachricht besteht aus den folgenden Elementen:
- eine Anforderungszeile (z. B. GET /images/logo.png HTTP / 1.1 die eine Ressource mit dem Namen /images/logo.png vom Server anfordert.) [19659091] Anforderungsheaderfelder (z. B. Accept-Language: de ).
- eine leere Zeile
- ein optionaler Nachrichtentext
Die Anforderungszeile und die anderen Headerfelder müssen jeweils mit
Eine Anforderungszeile, die nur den Pfadnamen enthält, wird von Servern akzeptiert, um die Kompatibilität mit HTTP-Clients vor der HTTP / 1.0-Spezifikation in RFC 1945 aufrechtzuerhalten. [16]
Anforderungsmethoden [ edit ]
HTTP definiert Methoden (manchmal als Verben bezeichnet, aber nirgendwo in der Spezifikation wird Verb oder noch erwähnt ist OPTIONS oder HEAD ein Verb), um die gewünschte Aktion anzugeben, die für die identifizierte Ressource ausgeführt werden soll. Was diese Ressource darstellt, ob bereits vorhandene Daten oder dynamisch generierte Daten, hängt von der Implementierung des Servers ab. Oft entspricht die Ressource einer Datei oder der Ausgabe einer ausführbaren Datei, die sich auf dem Server befindet. Die HTTP / 1.0-Spezifikation [17] definierte die GET-, HEAD- und POST-Methoden und die HTTP / 1.1-Spezifikation [18] fügte fünf neue Methoden hinzu: OPTIONS, PUT, DELETE, TRACE und CONNECT. Durch die Angabe in diesen Dokumenten ist ihre Semantik bekannt und kann davon abhängen. Jeder Client kann eine beliebige Methode verwenden, und der Server kann so konfiguriert werden, dass er eine beliebige Kombination von Methoden unterstützt. Wenn eine Methode einem Zwischenprodukt nicht bekannt ist, wird sie als unsichere und nicht idempotente Methode behandelt. Es gibt keine Begrenzung für die Anzahl der Methoden, die definiert werden können. Dadurch können zukünftige Methoden festgelegt werden, ohne die vorhandene Infrastruktur zu beschädigen. Beispielsweise definierte WebDAV 7 neue Methoden und RFC 5789 legte die PATCH-Methode fest.
Methodennamen unterscheiden zwischen Groß- und Kleinschreibung [19][20]. Dies steht im Gegensatz zu HTTP-Header-Feldnamen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird [21].
- GET
- Die GET-Methode fordert eine Darstellung der angegebenen Ressource an. Anfragen, die GET verwenden, sollten nur Daten abrufen und keine anderen Auswirkungen haben. (Dies gilt auch für einige andere HTTP-Methoden.) [1] Das W3C hat Leitlinien zu dieser Unterscheidung veröffentlicht und gesagt: "Das Design von Webanwendungen sollte von den oben genannten Prinzipien, aber auch von den entsprechenden Einschränkungen abhängen." [22] Siehe sichere Methoden unten.
- HEAD
- Bei der HEAD-Methode wird nach einer Antwort gefragt, die mit der einer GET-Anforderung identisch ist, jedoch ohne den Antworttext. Dies ist nützlich, um in Antwortheader geschriebene Metainformationen abzurufen, ohne den gesamten Inhalt transportieren zu müssen.
- POST
- Die POST-Methode fordert den Server auf, die in der Anforderung eingeschlossene Entität als neuen Untergeordneten der Webressource zu akzeptieren identifiziert durch die URI. Bei den POST-Daten kann es sich beispielsweise um eine Anmerkung für vorhandene Ressourcen handeln. eine Nachricht für ein Bulletin Board, eine Newsgroup, eine Mailingliste oder einen Kommentarthread; einen Datenblock, der das Ergebnis der Übermittlung eines Webformulars an einen Datenverarbeitungsprozess ist; oder ein Element, das einer Datenbank hinzugefügt werden soll [23]
- PUT
- Die PUT-Methode fordert die Speicherung der eingeschlossenen Entität unter der angegebenen URI an. Wenn sich der URI auf eine bereits vorhandene Ressource bezieht, wird sie geändert. Wenn der URI nicht auf eine vorhandene Ressource verweist, kann der Server die Ressource mit diesem URI erstellen. [24]
- DELETE
- Die DELETE-Methode löscht die angegebene Ressource.
- TRACE
- Die TRACE-Methode wiederholt die empfangene Anforderung, sodass ein Client sehen kann, welche Änderungen oder Ergänzungen von Zwischenservern vorgenommen wurden.
- OPTIONS
- Die OPTIONS-Methode gibt die HTTP-Methoden zurück, die der Server unterstützt die angegebene URL Dies kann verwendet werden, um die Funktionalität eines Webservers zu überprüfen, indem anstelle einer bestimmten Ressource '*' angefordert wird.
- CONNECT
- [25] Die CONNECT-Methode konvertiert die Anforderungsverbindung in ein transparentes TCP / IP-Tunnel, normalerweise zur Ermöglichung der SSL-verschlüsselten Kommunikation (HTTPS) über einen unverschlüsselten HTTP-Proxy. [26][27] Siehe HTTP CONNECT-Methode.
- PATCH
- Die PATCH-Methode wendet partielle Änderungen an einer Ressource an. [28]
All general - Zweckbestimmte HTTP-Server müssen mindestens die GET- und HEAD-Methoden implementieren, und alle anderen Methoden werden von der Spezifikation als optional betrachtet. [29]
Sichere Methoden [ edit ]
Einige der Methoden (z. B. GET, HEAD, OPTIONS und TRACE) sind per Konvention als safe definiert, was bedeutet, dass sie nur zum Abrufen von Informationen dienen und den Status des Servers nicht ändern sollen. Mit anderen Worten, sie sollten keine Nebenwirkungen haben, abgesehen von relativ harmlosen Effekten wie Protokollierung, Web-Caching, Auslieferung von Bannerwerbung oder Inkrementieren eines Web-Counters. Das Erstellen von willkürlichen GET-Anforderungen ohne Berücksichtigung des Zustands der Anwendung sollte daher als sicher angesehen werden. Dies ist jedoch nicht durch den Standard vorgeschrieben, und es wird ausdrücklich anerkannt, dass dies nicht garantiert werden kann.
Im Gegensatz dazu sind Methoden wie POST, PUT, DELETE und PATCH für Aktionen vorgesehen, die entweder Nebenwirkungen auf dem Server oder externe Nebenwirkungen wie Finanztransaktionen oder die Übertragung von E-Mails verursachen können. Solche Methoden werden daher normalerweise nicht von konformen Web-Robotern oder Web-Crawlern verwendet. einige, die nicht konform sind, neigen dazu, Anfragen ohne Rücksicht auf Kontext oder Konsequenzen zu stellen.
Trotz der vorgeschriebenen Sicherheit von GET -Anfragen ist ihre Handhabung durch den Server in der Praxis in keiner Weise technisch beschränkt. Unvorsichtige oder vorsätzliche Programmierung kann daher zu nicht unerheblichen Änderungen auf dem Server führen. Dies wird nicht empfohlen, da dies zu Problemen beim Web-Caching, bei Suchmaschinen und anderen automatisierten Agenten führen kann, die unbeabsichtigte Änderungen am Server vornehmen können. Beispielsweise kann eine Website das Löschen einer Ressource über eine URL wie http://example.com/article/1234/delete erlauben, die bei willkürlichem Abruf sogar GET verwendet ]würde den Artikel einfach löschen. [30]
Ein Beispiel dafür ist die Praxis in der kurzlebigen Google Web Accelerator-Beta, bei der beliebige URLs auf der von einem Benutzer angezeigten Seite vorab abgerufen wurden. wodurch Datensätze automatisch geändert oder gelöscht werden en masse . Das Beta wurde nur wenige Wochen nach seiner ersten Veröffentlichung suspendiert, und zwar nach weit verbreiteter Kritik. [31][30]
Idempotente Methoden und Webanwendungen [ edit ]
Die Methoden PUT und DELETE sind als idempotent definiert, was bedeutet, dass es sich um idempotente Methoden handelt Mehrere identische Anforderungen sollten die gleiche Wirkung haben wie eine einzige Anforderung (), dass Idempotenz sich auf den Zustand des Systems bezieht, nachdem die Anforderung abgeschlossen ist. Wenn der Server die Aktion ausführt (z. B. Löschen eines Datensatzes) oder den Antwortcode, führt dies aus Die Rückgabe kann bei nachfolgenden Anfragen unterschiedlich sein. Der Systemstatus ist jedes Mal gleich [Zitat benötigt . Die als sicher vorgeschriebenen Methoden GET, HEAD, OPTIONS und TRACE sollten ebenfalls idempotent sein, da HTTP ein zustandsloses Protokoll ist. [19459111[1]
Im Gegensatz dazu ist die POST-Methode nicht notwendigerweise idempotent und Das mehrmalige Senden einer identischen POST-Anforderung kann den Status weiter beeinträchtigen oder weitere Nebenwirkungen (z. B. Finanztransaktionen) verursachen. In einigen Fällen kann dies wünschenswert sein, in anderen Fällen kann dies jedoch auf einen Unfall zurückzuführen sein, z. B. wenn ein Benutzer nicht erkennt, dass seine Aktion zum Senden einer anderen Anfrage führt, oder er keine angemessene Rückmeldung über seine erste Anfrage erhalten hat erfolgreich. Webbrowser können zwar Warnhinweisdialogfelder anzeigen, um Benutzer in einigen Fällen zu warnen, in denen beim erneuten Laden einer Seite eine POST-Anforderung erneut gesendet wird. In der Regel ist es jedoch Aufgabe der Webanwendung, Fälle zu behandeln, bei denen eine POST-Anforderung nicht mehr als einmal gesendet werden sollte.
Beachten Sie, dass das Protokoll oder der Webserver nicht erzwingt, ob eine Methode idempotent ist. Es ist durchaus möglich, eine Webanwendung zu schreiben, in der (z. B.) eine Datenbankeinfügung oder eine andere nicht idempotente Aktion durch eine GET- oder andere Anforderung ausgelöst wird. Das Ignorieren dieser Empfehlung kann jedoch zu unerwünschten Folgen führen, wenn ein Benutzeragent davon ausgeht, dass die Wiederholung derselben Anfrage sicher ist, wenn dies nicht der Fall ist.
Sicherheit [ edit ]
Die TRACE-Methode kann als Teil einer Angriffsklasse verwendet werden, die als Cross-Site-Tracing bekannt ist. Aus diesem Grund ist es üblich, die Sicherheitshinweise in der Serverkonfiguration zu deaktivieren. [32] Microsoft IIS unterstützt eine proprietäre "TRACK" -Methode, die sich ähnlich verhält und deren Deaktivierung ebenfalls empfohlen wird. [32]
Übersichtstabelle [19659018] [ edit ]
HTTP-Verfahren | RFC | Anfrage hat Körper | Die Antwort hat Körper | Sicher | Idempotent | Cachefähig |
---|---|---|---|---|---|---|
GET | RFC 7231 | Nein | Ja | Ja | Ja | Ja |
HEAD | RFC 7231 | Nein | Nein | Ja | Ja | Ja |
POST | RFC 7231 | Ja | Ja | Nein | Nein | Ja |
PUT | RFC 7231 | Ja | Ja | Nein | Ja | Nein |
LÖSCHEN | RFC 7231 | Nein | Ja | Nein | Ja | Nein |
CONNECT | RFC 7231 | Nein | Ja | Nein | Nein | Nein |
OPTIONEN | RFC 7231 | Optional | Ja | Ja | Ja | Nein |
TRACE | RFC 7231 | Nein | Ja | Ja | Ja | Nein |
PATCH | RFC 5789 | Ja | Ja | Nein | Nein | Nein |
Antwortnachricht [ edit ]
Die Antwortnachricht besteht aus den folgenden Elementen:
- eine Statuszeile, die den Statuscode und die Grundnachricht enthält (z. B. HTTP / 1.1 200 OK die angibt, dass die Anforderung des Clients erfolgreich war.)
- Antwortkopffelder (z. B. Content-Type: text / html )
- eine leere Zeile
- ein optionaler Nachrichtentext
Die Statuszeile und andere Header-Felder müssen alle mit Seit HTTP / 1.0 wird die erste Zeile der HTTP-Antwort als -Statuszeile bezeichnet und enthält eine numerische ] Statuscode (wie "404") und ein textueller Grundsatz (wie "Nicht gefunden"). Die Art und Weise, wie der Benutzeragent mit der Antwort umgeht, hängt hauptsächlich vom Code und sekundär von den anderen Antwortheaderfeldern ab. Benutzerdefinierte Statuscodes können verwendet werden, denn wenn der Benutzeragent auf einen Code stößt, den er nicht erkennt, kann er mit der ersten Ziffer des Codes die allgemeine Klasse der Antwort bestimmen. [34] Die Standard-Begründungssätze sind nur Empfehlungen und können nach Ermessen des Web-Entwicklers durch "lokale Äquivalente" ersetzt werden. Wenn der Statuscode auf ein Problem hindeutet, zeigt der Benutzeragent möglicherweise dem Benutzer die -Phrase an, um weitere Informationen über die Art des Problems bereitzustellen. Der Standard erlaubt es dem Benutzeragenten auch, zu versuchen, den -Grundsatz zu interpretieren, obwohl dies unklug sein könnte, da der Standard explizit angibt, dass Statuscodes maschinenlesbar sind, und -Grundsätze menschlich sind. lesbar. Der HTTP-Statuscode ist hauptsächlich in fünf Gruppen unterteilt, um die Anforderungen und Antworten zwischen Client und Server unter dem genannten Namen besser zu erläutern: Der bekannteste Weg zum Aufbau einer verschlüsselten HTTP-Verbindung ist HTTPS. [35] Zwei weitere Verfahren zum Herstellen einer verschlüsselten HTTP-Verbindung exist: Secure Hypertext Transfer Protocol und Verwendung des HTTP / 1.1-Upgrade-Headers zum Angeben eines Upgrades auf TLS. Browserunterstützung für diese beiden ist jedoch fast nicht vorhanden. [36][37][38] Nachfolgend finden Sie eine Beispielkonversation zwischen einem HTTP-Client und einem HTTP-Server, der unter www ausgeführt wird Beispiel 80, Port 80. Wie in den vorherigen Abschnitten erwähnt, werden alle Daten in einer ASCII-Kodierung (ASCII) gesendet, wobei eine zwei Byte lange CR LF-Zeile (' r n') verwendet wird, die am Ende endet von jeder Zeile. Auf eine Clientanforderung (in diesem Fall aus der Anforderungszeile und nur einem Kopfzeilenfeld) folgt eine Leerzeile, so dass die Anforderung mit einer doppelten Newline endet, jeweils in Form eines Wagenrücklauf gefolgt von einem Zeilenvorschub. Das Feld "Host" unterscheidet verschiedene DNS-Namen, die sich eine einzige IP-Adresse teilen, und ermöglicht so das namenbasierte virtuelle Hosting. Während dies in HTTP / 1.0 optional ist, ist es in HTTP / 1.1 obligatorisch. > > > > > 1XX
2XX
3XX
4XX
5XX
Verschlüsselte Verbindungen [ edit ]
Beispielsitzung [ edit ]
Kundenanfrage [ edit ]
GET /index.html HTTP / 1.1 Host : Host : Host : : ] www.example.com
Server-Antwort [ edit ]
HTTP / 1.1 200 OK Datum Mon, 23. Mai 2005 22:38:34 GMT Inhaltstyp : Text / HTML; Zeichensatz = UTF-8 Content-Length : 138 Letzte Änderung : Mi, 08. Januar 2003 23:11:55 GMT Server : Apache / 1.3.3.7 (Unix) (Red-Hat / Linux) ETag : "3f80f-1b6-3e1cb03b" Accept-Ranges : Bytes Verbindung : schließen < html Kopf title Eine Beispielseite </ title > </ Kopf Körper Körper [19456527] Hallo Welt, das ist ein sehr einfaches HTML-Dokument. </ body > </ html >
> Das Headerfeld ETag (Entity-Tag) wird verwendet, um zu ermitteln, ob eine angeforderte Ressource zwischengespeichert ist identisch mit der aktuellen Version der Ressource auf dem Server. Content-Type gibt den Internet-Medientyp der von der HTTP-Nachricht übermittelten Daten an, während Content-Length seine Länge in Byte angibt. Der HTTP / 1.1-Webserver veröffentlicht seine Fähigkeit, auf Anfragen nach bestimmten Bytebereichen des Dokuments zu reagieren, indem das Feld Accept-Ranges: Bytes gesetzt wird. Dies ist nützlich, wenn der Client nur bestimmte Teile [39] einer vom Server gesendeten Ressource benötigt, die als Byte-Serving bezeichnet wird. Wenn Connection: close gesendet wird, bedeutet dies, dass der Webserver die TCP-Verbindung unmittelbar nach der Übertragung dieser Antwort beendet.
Die meisten Kopfzeilen sind optional. Wenn Content-Length fehlt, wird die Länge auf andere Weise bestimmt. Chunked Transfer Encoding verwendet eine Blockgröße von 0, um das Ende des Inhalts zu markieren. Identity Codierung ohne Content-Length liest Inhalt, bis der Socket geschlossen ist.
Eine Content-Encoding wie gzip kann verwendet werden, um die übertragenen Daten zu komprimieren.
Ähnliche Protokolle [ edit ]
Das Gopher-Protokoll war ein Protokoll zur Übermittlung von Inhalten, das Anfang der 1990er Jahre durch HTTP verdrängt wurde. Das SPDY-Protokoll ist eine Alternative zu HTTP, die bei Google entwickelt wurde. Es wird durch das neue HTTP-Protokoll HTTP / 2 ersetzt.
Siehe auch [ edit ]
- ^ a b [19599322] c d Fielding, Roy T .; Gettys, James; Mogul, Jeffrey C .; Nielsen, Henrik Frystyk; Masinter, Larry; Leach, Paul J .; Berners-Lee, Tim (Juni 1999). Hypertext Transfer Protocol - HTTP / 1.1 . IETF. doi: 10.17487 / RFC2616. RFC 2616 . https://tools.ietf.org/html/rfc2616 .
- ^ Bischof Mike. Msgstr "Hypertext Transfer Protocol (HTTP) über QUIC". tools.ietf.org . 2018-11-19 .
- ^ Cimpanu, Catalin. "HTTP-über-QUIC wird in HTTP / 3 | ZDNet umbenannt". ZDNet . Abgerufen 2018-11-19 .
- ^ "Transport Layer Security (TLS) -Anwendungsschichtprotokoll-Aushandlungserweiterung". IETF. Juli 2014. RFC 7301 .
- ^ Belshe, M .; Peon, R .; Thomson, M. "Hypertext Transfer Protocol Version 2, Verwendung von TLS-Funktionen" . 2015-02-10 .
- ^ "Overall Operation" abgerufen. p. 12. sek. 1.4. doi: 10.17487 / RFC2616. RFC 2616 . https://tools.ietf.org/html/rfc2616#section-1.4 .
- ^ Berners-Lee, Tim. "Hypertext Transfer Protocol". World Wide Web Consortium . 31. August 2010 .
- ^ Tim Berners-Lee. "Das ursprüngliche HTTP wie 1991 definiert". World Wide Web Consortium . 24. Juli 2010 .
- ^ Raggett, Dave. "Dave Raggetts Bio". World Wide Web Consortium . 11. Juni 2010 .
- ^ Raggett, Dave; Berners-Lee, Tim. "Arbeitsgruppe" Hypertext Transfer Protocol ". World Wide Web Consortium . 29. September 2010 .
- ^ Raggett, Dave. "HTTP-WG-Pläne". World Wide Web Consortium . 29. September 2010 .
- ^ a b 19659322 ] Simon Spero. Msgstr "Fortschritt bei HTTP - NG". World Wide Web Consortium . 11. Juni 2010 .
- ^ "HTTP / 1.1". Webcom.com-Glossareintrag . Aus dem Original am 2001-11-21 archiviert. 2009-05-29 .
- ^ a b Fielding, Roy T .; Reschke, Julian F. (Juni 2014). Hypertext Transfer Protocol (HTTP / 1.1): Authentifizierung . IETF. doi: 10.17487 / RFC7235. RFC 7235 . https://tools.ietf.org/html/rfc7235 .
- ^ a b "HTTP Message". p. 31. sec. 4. doi:10.17487/RFC2616. RFC 2616. https://tools.ietf.org/html/rfc2616#section-4.
- ^ "Apache Week. HTTP/1.1". 090502 apacheweek.com
- ^ Berners-Lee, Tim; Fielding, Roy T.; Nielsen, Henrik Frystyk. "Method Definitions". Hypertext Transfer Protocol – HTTP/1.0. IETF. pp. 30–32. sek. 8. doi:10.17487/RFC1945. RFC 1945. https://tools.ietf.org/html/rfc1945#section-8.
- ^ "Method Definitions". pp. 51–57. sek. 9. doi:10.17487/RFC2616. RFC 2616. https://tools.ietf.org/html/rfc2616#section-9.
- ^ RFC-7210 section 3.1.1
- ^ RFC-7231 section 4.1
- ^ RFC-7230 section 3.2
- ^ Jacobs, Ian (2004). "URIs, Addressability, and the use of HTTP GET and POST". Technical Architecture Group finding. W3C. Retrieved 26 September 2010.
- ^ "POST". p. 54. sec. 9.5. doi:10.17487/RFC2616. RFC 2616. https://tools.ietf.org/html/rfc2616#section-9.5.
- ^ "PUT". p. 55. sec. 9.6. doi:10.17487/RFC2616. RFC 2616. https://tools.ietf.org/html/rfc2616#section-9.6.
- ^ "CONNECT". Hypertext Transfer Protocol – HTTP/1.1. IETF. June 1999. p. 57. sec. 9.9. doi:10.17487/RFC2616. RFC 2616. https://tools.ietf.org/html/rfc2616#section-9.9. Retrieved 23 February 2014.
- ^ Khare, Rohit; Lawrence, Scott (May 2000). Upgrading to TLS Within HTTP/1.1. IETF. doi:10.17487/RFC2817. RFC 2817. https://tools.ietf.org/html/rfc2817.
- ^ "Vulnerability Note VU#150227: HTTP proxy default configurations allow arbitrary TCP connections". US-CERT. 2002-05-17. Retrieved 2007-05-10.
- ^ Dusseault, Lisa; Snell, James M. (March 2010). PATCH Method for HTTP. IETF. doi:10.17487/RFC5789. RFC 5789. https://tools.ietf.org/html/rfc5789.
- ^ "Method". p. 36. sec. 5.1.1. doi:10.17487/RFC2616. RFC 2616. https://tools.ietf.org/html/rfc2616#section-5.1.1.
- ^ a b Ediger, Brad (2007-12-21). Advanced Rails: Building Industrial-Strength Web Apps in Record Time. O'Reilly Media, Inc. p. 188. ISBN 978-0596519728.
A common mistake is to use GET for an action that updates a resource. [...] This problem came into the Rails public eye in 2005, when the Google Web Accelerator was released.
- ^ Cantrell, Christian (2005-06-01). "What Have We Learned From the Google Web Accelerator?". Adobe Blogs. Adobe. Archived from the original on 2017-08-19.
- ^ a b "Cross Site Tracing". OWASP. Retrieved 2016-06-22.
- ^ "Canonicalization and Text Defaults". sek. 3.7.1. doi:10.17487/RFC2616. RFC 2616. https://tools.ietf.org/html/rfc2616#section-3.7.1.
- ^ "Status-Line". p. 39. sec. 6.1. doi:10.17487/RFC2616. RFC 2616. https://tools.ietf.org/html/rfc2616#section-6.1.
- ^ Canavan, John (2001). Fundamentals of Networking Security. Norwood, MA: Artech House. pp. 82–83. ISBN 9781580531764.
- ^ Zalewski, Michal. "Browser Security Handbook". Retrieved 30 April 2015.
- ^ "Chromium Issue 4527: implement RFC 2817: Upgrading to TLS Within HTTP/1.1". Retrieved 30 April 2015.
- ^ "Mozilla Bug 276813 – [RFE] Support RFC 2817 / TLS Upgrade for HTTP 1.1". Retrieved 30 April 2015.
- ^ Luotonen, Ari; Franks, John (February 22, 1996). Byte Range Retrieval Extension to HTTP. IETF. I-D draft-ietf-http-range-retrieval-00. https://tools.ietf.org/html/draft-ietf-http-range-retrieval-00.
- ^ Nottingham, Mark (October 2010). Web Linking. IETF. doi:10.17487/RFC5988. RFC 5988. https://tools.ietf.org/html/rfc5988.
- ^ "Hypertext Transfer Protocol Bis (httpbis) – Charter". IETF. 2012.
Không có nhận xét nào:
Đăng nhận xét