1. Introduction
HTTP [RFC7230] confond l'identification des ressources avec leur emplacement. En d'autres termes, les URI "http://" et "https://" sont utilisés à la fois pour nommer et pour trouver les choses avec lesquelles interagir.
Dans certains cas, il est souhaitable de séparer l'identification et l'emplacement dans HTTP ; en gardant le même identifiant pour une ressource, mais en interagissant avec elle à un emplacement différent sur le réseau.
Par exemple :
- Un serveur d'origine peut souhaiter rediriger un client vers un serveur différent lorsqu'il est en surcharge, ou s'il a trouvé un serveur dans un emplacement plus proche du client.
- Un serveur d'origine peut souhaiter offrir l'accès à ses ressources en utilisant un nouveau protocole, tel que HTTP/2 [RFC7540], ou un protocole utilisant une sécurité améliorée, telle que Transport Layer Security (TLS) [RFC5246].
- Un serveur d'origine peut souhaiter segmenter ses clients en groupes de capacités, tels que ceux prenant en charge l'indication du nom du serveur (SNI) (Section 3 de [RFC6066]), à des fins opérationnelles.
Cette spécification définit un nouveau concept dans HTTP, les "Services Alternatifs" (Alternative Services), qui permet à un serveur d'origine de désigner des moyens supplémentaires d'interagir avec lui sur le réseau. Elle définit un cadre général pour cela dans la section 2, ainsi que des mécanismes spécifiques pour annoncer leur existence à l'aide de champs d'en-tête HTTP (section 3) ou de trames HTTP/2 (section 4), ainsi qu'un moyen d'indiquer qu'un service alternatif a été utilisé (section 5).
Elle entérine également le code d'état 421 (Misdirected Request) (section 6) que les serveurs d'origine ou leurs alternatives désignées peuvent utiliser pour indiquer qu'ils ne font pas autorité pour une origine donnée, dans les cas où le mauvais emplacement est utilisé.
1.1. Conventions de notation
Les mots clés "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", et "OPTIONAL" dans ce document doivent être interprétés comme décrit dans [RFC2119].
Ce document utilise la BNF augmentée définie dans [RFC5234] et mise à jour par [RFC7405] ainsi que l'extension "#rule" définie dans la section 7 de [RFC7230]. Les règles ci-dessous sont définies dans [RFC5234], [RFC7230] et [RFC7234] :
OWS = <OWS, voir [RFC7230], Section 3.2.3>
delta-seconds = <delta-seconds; voir [RFC7234], Section 1.2.1>
port = <port, voir [RFC7230], Section 2.7>
quoted-string = <quoted-string, voir [RFC7230], Section 3.2.6>
token = <token, voir [RFC7230], Section 3.2.6>
uri-host = <uri-host, voir [RFC7230], Section 2.7>