HTTP - Nachrichten
HTTP basiert auf dem Client-Server-Architekturmodell und einem zustandslosen Anforderungs- / Antwortprotokoll, das durch den Austausch von Nachrichten über eine zuverlässige TCP / IP-Verbindung funktioniert.
Ein HTTP- "Client" ist ein Programm (Webbrowser oder ein anderer Client), das eine Verbindung zu einem Server herstellt, um eine oder mehrere HTTP-Anforderungsnachrichten zu senden. Ein HTTP- "Server" ist ein Programm (im Allgemeinen ein Webserver wie Apache Web Server oder Internet Information Services IIS usw.), das Verbindungen akzeptiert, um HTTP-Anforderungen durch Senden von HTTP-Antwortnachrichten zu bedienen.
HTTP verwendet den URI (Uniform Resource Identifier), um eine bestimmte Ressource zu identifizieren und eine Verbindung herzustellen. Sobald die Verbindung hergestellt ist,HTTP messageswerden in einem Format übergeben, das dem von der Internetmail [RFC5322] und den MIME (Multipurpose Internet Mail Extensions) [RFC2045] verwendeten Format ähnelt. Diese Nachrichten enthaltenrequests vom Client zum Server und responses vom Server zum Client, der das folgende Format hat:
HTTP-message = <Request> | <Response> ; HTTP/1.1 messages
HTTP-Anforderungen und HTTP-Antworten verwenden ein generisches Nachrichtenformat von RFC 822 zum Übertragen der erforderlichen Daten. Dieses generische Nachrichtenformat besteht aus den folgenden vier Elementen.
- A Start-line
- Zero or more header fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF)
indicating the end of the header fields
- Optionally a message-body
In den folgenden Abschnitten werden alle in einer HTTP-Nachricht verwendeten Entitäten erläutert.
Start-Line der Nachricht
Eine Startzeile hat die folgende generische Syntax:
start-line = Request-Line | Status-Line
Wir werden Request-Line und Status-Line diskutieren, während wir HTTP Request- bzw. HTTP Response-Nachrichten diskutieren. Sehen wir uns zunächst die Beispiele für die Startlinie bei Anforderung und Antwort an:
GET /hello.htm HTTP/1.1 (This is Request-Line sent by the client)
HTTP/1.1 200 OK (This is Status-Line sent by the server)
Header-Felder
HTTP-Headerfelder enthalten die erforderlichen Informationen zur Anforderung oder Antwort oder zum im Nachrichtentext gesendeten Objekt. Es gibt vier Arten von HTTP-Nachrichtenkopfzeilen:
General-header: Diese Headerfelder sind allgemein für Anforderungs- und Antwortnachrichten anwendbar.
Request-header: Diese Headerfelder sind nur für Anforderungsnachrichten anwendbar.
Response-header: Diese Headerfelder sind nur für Antwortnachrichten anwendbar.
Entity-header: Diese Headerfelder definieren Metainformationen über den Entitätskörper oder, falls kein Körper vorhanden ist, über die durch die Anforderung identifizierte Ressource.
Alle oben genannten Header haben dasselbe generische Format und jedes Headerfeld besteht aus einem Namen, gefolgt von einem Doppelpunkt (:) und den Feldwert wie folgt:
message-header = field-name ":" [ field-value ]
Es folgen Beispiele für verschiedene Headerfelder:
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
Nachrichtentext
Der Nachrichtentextteil ist für eine HTTP-Nachricht optional. Wenn er jedoch verfügbar ist, wird er verwendet, um den der Anforderung oder Antwort zugeordneten Entitätstext zu übertragen. Wenn der Entitätskörper zugeordnet ist, ist dies normalerweise der FallContent-Type und Content-Length Kopfzeilen geben die Art des zugeordneten Körpers an.
Ein Nachrichtentext ist derjenige, der die tatsächlichen HTTP-Anforderungsdaten (einschließlich Formulardaten und hochgeladen usw.) und HTTP-Antwortdaten vom Server (einschließlich Dateien, Bilder usw.) enthält. Im Folgenden wird der einfache Inhalt eines Nachrichtentexts dargestellt:
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
In den nächsten beiden Kapiteln werden die oben erläuterten Konzepte verwendet, um HTTP-Anforderungen und HTTP-Antworten vorzubereiten.