5. Message Routing (Nachrichten-Routing)
Das Routing einer HTTP-Anfragenachricht wird vom Client basierend auf der Zielressource, der Proxy-Konfiguration und der Einrichtung oder Wiederverwendung einer Netzwerkverbindung bestimmt.
5.1. Identifying a Target Resource (Identifizierung einer Zielressource)
HTTP begrenzt nicht, wie viele verschiedene Ressourcen ein einzelner Ursprungsserver autoritative Antworten bereitstellen kann, noch den Umfang der Autorität einer einzelnen Ressource oder den URI-Raum, auf den eine einzelne Ressource verweisen kann.
5.2. Connecting Inbound (Eingehende Verbindung)
Sobald der Client die Ziel-URI und den Ursprungsserver oder Proxy durch Untersuchen der URI oder seiner Konfiguration bestimmt hat, bestimmt der Client, wohin er sich verbinden soll.
5.3. Request Target (Anfrageziel)
Sobald eine eingehende Verbindung zum Ziel hergestellt ist, sendet der Client eine HTTP-Anfragenachricht (Section 3) mit einer start-line, die ein request-target (Anfrageziel) enthält, das die Zielressource identifiziert, auf die die Anfrage angewendet werden soll.
request-target = origin-form
/ absolute-form
/ authority-form
/ asterisk-form
5.3.1. origin-form
Die häufigste Form des Anfrageziels ist "origin-form".
origin-form = absolute-path [ "?" query ]
5.3.2. absolute-form
Beim Senden einer Anfrage an einen Proxy, mit Ausnahme von CONNECT-Anfragen oder server-weiten OPTIONS-Anfragen (unten beschrieben), MUSS ein Client die absolute-form der Ziel-URI als Anfrageziel senden.
absolute-form = absolute-URI
5.3.3. authority-form
Das authority-form-Anfrageziel wird nur für CONNECT-Anfragen ([RFC7231], [Section 4.3.6]) verwendet.
authority-form = authority
5.3.4. asterisk-form
Das asterisk-form-Anfrageziel wird nur für server-weite OPTIONS-Anfragen ([RFC7231], [Section 4.3.7]) verwendet.
asterisk-form = "*"
5.4. Host
Der Host-Header liefert die Host- und Port-Informationen der Ziel-URI in einer Anfrage und ermöglicht es dem Ursprungsserver, Ressourcen zu unterscheiden, die über eine einzelne IP-Adresse bereitgestellt werden.
Host = uri-host [ ":" port ]
Ein Client MUSS ein Host-Header-Feld in allen HTTP/1.1-Anfragenachrichten senden.
5.5. Effective Request URI (Effektive Anfrage-URI)
Wenn das Anfrageziel in absolute-form vorliegt, ist die effektive Anfrage-URI (effective request URI) das Anfrageziel.
5.6. Associating a Response to a Request (Zuordnung einer Antwort zu einer Anfrage)
HTTP enthält keine Identifikatoren in Antworten, um eine Antwort explizit einer bestimmten Anfrage zuzuordnen. Daher verlässt es sich auf die zugrunde liegende Verbindung, um zu identifizieren, welche Anfrage mit einer Antwort verbunden ist.
5.7. Message Forwarding (Nachrichtenweiterleitung)
Wie in Section 2.3 beschrieben, können Vermittler als Proxy für einen ausgehenden Server fungieren, als Gateway, das als Repräsentation eines Ursprungsservers fungiert, oder als Tunnel, der als Verbindungsrelay fungiert.
5.7.1. Via
Der Via-Header zeigt das Vorhandensein von intermediären Protokollen und Empfängern zwischen der Anfragenachricht und der Antwortnachricht an.
Via = 1#( received-protocol RWS received-by [ RWS comment ] )
received-protocol = [ protocol-name "/" ] protocol-version
received-by = ( uri-host [ ":" port ] ) / pseudonym
pseudonym = token
Jeder Vermittler MUSS ein Via-Header-Feld hinzufügen, bevor er die Nachricht weiterleitet.
5.7.2. Transformations (Transformationen)
Einige Vermittler umfassen Transformationsfunktionen für die Nutzlast oder die Nachrichtensemantik, die für einige HTTP-Anwendungen nützlich sein können.
Ein Proxy SOLLTE den Absichtsinhalt (intent content) einer Anfrage nicht ändern, es sei denn, dies wird ausdrücklich angefordert.