4. La trame HTTP/2 ALTSVC
La trame HTTP/2 ALTSVC ([RFC7540], Section 4) annonce la disponibilité d'un service alternatif à un client HTTP/2.
La trame ALTSVC est une extension non critique de HTTP/2. Les points de terminaison qui ne prennent pas en charge cette trame l'ignoreront (conformément aux règles d'extensibilité définies dans la Section 4.1 de [RFC7540]).
Une trame ALTSVC d'un serveur vers un client sur un flux autre que le flux 0 indique que le service alternatif transmis est associé à l'origine de ce flux.
Une trame ALTSVC d'un serveur vers un client sur le flux 0 indique que le service alternatif transmis est associé à l'origine contenue dans le champ Origin de la trame. Une association avec une origine que le client ne considère pas comme faisant autorité pour la connexion actuelle DOIT être ignorée.
Le type de trame ALTSVC est 0xa (décimal 10).
+-------------------------------+-------------------------------+
| Origin-Len (16) | Origin? (*) ...
+-------------------------------+-------------------------------+
| Alt-Svc-Field-Value (*) ...
+---------------------------------------------------------------+
Charge utile de la trame ALTSVC
La trame ALTSVC contient les champs suivants :
- Origin-Len: Un entier non signé de 16 bits indiquant la longueur, en octets, du champ Origin.
- Origin: Une séquence de caractères OPTIONNELLE contenant la sérialisation ASCII d'une origine ([RFC6454], Section 6.2) à laquelle le service alternatif est applicable.
- Alt-Svc-Field-Value: Une séquence d'octets (longueur déterminée en soustrayant la longueur de tous les champs précédents de la longueur de la trame) contenant une valeur identique à la valeur du champ Alt-Svc définie dans la Section 3 (production ABNF "Alt-Svc").
La trame ALTSVC ne définit aucun drapeau.
La trame ALTSVC est destinée à être reçue par les clients. Un appareil agissant en tant que serveur DOIT l'ignorer.
Une trame ALTSVC sur le flux 0 avec des informations "Origin" vides (longueur 0) est invalide et DOIT être ignorée. Une trame ALTSVC sur un flux autre que le flux 0 contenant des informations "Origin" non vides est invalide et DOIT être ignorée.
La trame ALTSVC est traitée saut par saut. Un intermédiaire NE DOIT PAS transmettre les trames ALTSVC, bien qu'il puisse utiliser les informations contenues dans les trames ALTSVC pour former de nouvelles trames ALTSVC à envoyer à ses propres clients.
La réception d'une trame ALTSVC est sémantiquement équivalente à la réception d'un champ d'en-tête Alt-Svc. En conséquence, la trame ALTSVC entraîne le remplacement des services alternatifs pour l'origine correspondante. Notez qu'il serait imprudent de mélanger l'utilisation des champs d'en-tête Alt-Svc avec l'utilisation des trames ALTSVC, car la séquence de réception pourrait être difficile à prévoir.