Aller au contenu principal

1. Introduction (Introduction)

Le protocole de transfert hypertexte (HTTP) [RFC7230] fournit une sémantique compatible au niveau des ressources entre les différentes versions, mais il n'offre pas de compatibilité au niveau de la gestion des connexions. D'autres protocoles qui s'appuient sur les détails de gestion des connexions de HTTP, tels que WebSockets, doivent être mis à jour pour les nouvelles versions de HTTP.

Le protocole WebSocket [RFC6455] utilise le mécanisme de mise à niveau HTTP/1.1 (Section 6.7 de [RFC7230]) pour faire passer une connexion TCP de HTTP à une connexion WebSocket. Une approche différente doit être adoptée avec HTTP/2 [RFC7540]. En raison de sa nature de multiplexage, HTTP/2 n'autorise pas les champs d'en-tête ou les codes d'état à l'échelle de la connexion, tels que les champs d'en-tête de demande Upgrade et Connection ou le code de réponse 101 (Switching Protocols). Ceux-ci sont tous requis par la poignée de main d'ouverture de [RFC6455].

Le fait de pouvoir amorcer des WebSockets à partir de HTTP/2 permet de partager une connexion TCP entre les deux protocoles et étend l'utilisation plus efficace du réseau par HTTP/2 aux WebSockets.

Ce document étend la méthode HTTP CONNECT, telle que spécifiée pour HTTP/2 dans la section 8.3 de [RFC7540]. L'extension permet de substituer un nouveau nom de protocole auquel se connecter plutôt que l'hôte externe normalement utilisé par CONNECT. Le résultat est un tunnel sur un flux HTTP/2 unique qui peut transporter des données pour WebSockets (ou tout autre protocole). Les autres flux sur la connexion peuvent transporter davantage de tunnels CONNECT étendus, des données HTTP/2 traditionnelles ou un mélange des deux.

Ce flux tunnellisé sera multiplexé avec d'autres flux réguliers sur la connexion et bénéficiera des fonctionnalités normales de priorité, d'annulation et de contrôle de flux de HTTP/2.

Les flux qui établissent avec succès une connexion WebSocket à l'aide d'un flux tunnellisé et des modifications apportées à la poignée de main d'ouverture définies dans ce document utilisent ensuite le protocole WebSocket traditionnel, traitant le flux comme s'il s'agissait de la connexion TCP mentionnée dans [RFC6455].