5. Message Routing (Routage des Messages)
Le routage d'un message de requête HTTP est déterminé par le client sur la base de la ressource cible, de la configuration du proxy et de l'établissement ou de la réutilisation d'une connexion réseau.
5.1. Identifying a Target Resource (Identification d'une Ressource Cible)
HTTP ne limite pas le nombre de ressources différentes pour lesquelles un seul serveur d'origine peut fournir des réponses faisant autorité, ni la portée de l'autorité d'une seule ressource, ni l'espace URI qu'une seule ressource peut référencer.
5.2. Connecting Inbound (Connexion Entrante)
Une fois que le client a déterminé l'URI cible et le serveur d'origine ou proxy en examinant l'URI ou sa configuration, le client détermine où se connecter.
5.3. Request Target (Cible de Requête)
Une fois qu'une connexion entrante vers la cible est établie, le client envoie un message de requête HTTP (Section 3) avec une start-line qui inclut une request-target (cible de requête) identifiant la ressource cible à laquelle la requête doit être appliquée.
request-target = origin-form
/ absolute-form
/ authority-form
/ asterisk-form
5.3.1. origin-form
La forme de cible de requête la plus courante est "origin-form".
origin-form = absolute-path [ "?" query ]
5.3.2. absolute-form
Lors de l'envoi d'une requête à un proxy, à l'exception des requêtes CONNECT ou des requêtes OPTIONS à l'échelle du serveur (décrites ci-dessous), un client DOIT envoyer l'absolute-form de l'URI cible comme cible de requête.
absolute-form = absolute-URI
5.3.3. authority-form
La cible de requête authority-form est utilisée uniquement pour les requêtes CONNECT ([RFC7231], [Section 4.3.6]).
authority-form = authority
5.3.4. asterisk-form
La cible de requête asterisk-form est utilisée uniquement pour les requêtes OPTIONS à l'échelle du serveur ([RFC7231], [Section 4.3.7]).
asterisk-form = "*"
5.4. Host
L'en-tête Host fournit les informations d'hôte et de port de l'URI cible dans une requête, permettant au serveur d'origine de distinguer les ressources servies sur une seule adresse IP.
Host = uri-host [ ":" port ]
Un client DOIT envoyer un champ d'en-tête Host dans tous les messages de requête HTTP/1.1.
5.5. Effective Request URI (URI de Requête Effectif)
Si la cible de requête est sous forme absolute-form, alors l'effective request URI (URI de requête effectif) est la cible de requête.
5.6. Associating a Response to a Request (Association d'une Réponse à une Requête)
HTTP ne comprend pas d'identificateur dans les réponses pour associer explicitement une réponse à une requête spécifique. Par conséquent, il s'appuie sur la connexion sous-jacente pour identifier quelle requête est associée à une réponse.
5.7. Message Forwarding (Transfert de Messages)
Comme décrit dans la Section 2.3, les intermédiaires peuvent agir comme proxy d'un serveur sortant, comme passerelle agissant comme une représentation d'un serveur d'origine, ou comme tunnel agissant comme un relais de connexion.
5.7.1. Via
L'en-tête Via indique la présence de protocoles et de destinataires intermédiaires entre le message de requête et le message de réponse.
Via = 1#( received-protocol RWS received-by [ RWS comment ] )
received-protocol = [ protocol-name "/" ] protocol-version
received-by = ( uri-host [ ":" port ] ) / pseudonym
pseudonym = token
Chaque intermédiaire DOIT ajouter un champ d'en-tête Via avant de transférer le message.
5.7.2. Transformations (Transformations)
Certains intermédiaires incluent des fonctionnalités de transformation de la charge utile ou de la sémantique des messages, qui peuvent être utiles pour certaines applications HTTP.
Un proxy NE DEVRAIT PAS modifier le contenu intentionnel (intent content) d'une requête, sauf si cela est explicitement demandé.