Le HTTP moderne est stateful. L'ancien HTTP était stateless.
Avant que Netscape invente les cookies et le HTTPS en 1994, le HTTP pouvait être considéré comme stateless. Au fil du temps, de nombreux composants stateful ont été formellement ajoutés pour une myriade de raisons, y compris les performances et la sécurité. Mais les ajouts stateful n'étaient que des ajouts, il était donc toujours dit de manière familière que le HTTP était stateless car le noyau original cherchait explicitement à être stateless.
Alors que le HTTP/1 cherchait à l'origine à être stateless, de nombreux composants HTTP/2 sont la définition même de stateful. HTTP/2 a abandonné les objectifs stateless. Les composants stateful ne sont plus des "ajouts", mais des composants stateful sont définis dans le noyau de la norme HTTP/2. Il y a 125 références à "state" et zéro référence à "stateless" dans la spécification HTTP/2 (RFC 7540).
Voici une liste limitée, non exhaustive, de composants stateful de HTTP/1 et HTTP/2 :
- Le RFC de HTTP/2 dit clairement que "la compression des en-têtes est stateful."
- Le but des identifiants de flux de HTTP/2 est le state. (Une section entière est dédiée aux divers états.)
- Les en-têtes de HTTP/2, qui établissent les identifiants de flux, sont stateful. (Juste un exemple du RFC : "Les trames HEADERS peuvent être envoyées sur un flux dans l'état "inactif", "réservé (local)", "ouvert" ou "moitié-fermé (distant)" state.")
- Les trames de HTTP/2 sont stateful. Juste un exemple du RFC, "La transmission de types de trames spécifiques peut modifier l'état d'une connexion."
- Les cookies sont stateful et la spécification est intitulée "Mécanisme de gestion de l'État HTTP" (RFC 6265).
- Le HTTPS, qui stocke des clés donc de l'état, est stateful. Notez également que tout le système de CA nécessaire pour le HTTPS est la gestion des états.
- L'authentification HTTP nécessite un état. (C'est tellement évident que cela passe inaperçu.)
- Le stockage web est stateful. (C'est tellement évident que cela passe inaperçu.)
- Le cache HTTP est stateful. Le cache, par définition, est stateful. (C'est tellement évident que cela passe inaperçu.)
- Le chiffrement opportuniste est stateful.
- Les paramètres d'URL sont stateful. C'est ainsi que les applications réalisaient un état avant le premier mécanisme stateful formel (les cookies) en 1994. Même si vous n'utilisez pas d'autres fonctionnalités HTTP stateful, si vous utilisez les paramètres d'URL de manière stateful, cette application HTTP est stateful.
La section 5.1 du RFC de HTTP/2 est un excellent exemple de mécanismes stateful définis par la norme HTTP/2.
Est-il sûr pour les applications web de considérer HTTP/2 comme un protocole stateless ?
HTTP/2 est un protocole stateful, mais votre application HTTP/2 peut ignorer les fonctionnalités stateful pour maintenir la statelessness.
Les applications existantes de HTTP/1 et HTTP/2 nécessitant un état se casseront si elles tentent de les utiliser sans état. Par exemple, il peut être impossible de se connecter à certains sites web HTTP/1.1 si les cookies sont désactivés, ce qui casse l'application. Il n'est peut-être pas sûr de supposer qu'une application HTTP/1 ou HTTP/2 particulière est sans état.
Résumé :
Les mécanismes stateful sont des ajouts ultérieurs au standard stateless original. Le HTTP/1 est familièrement dit être sans état, bien que dans la pratique nous utilisions des mécanismes stateful normalisés, comme les cookies et le cache. Contrairement au HTTP/1, le HTTP/2 définit des composants stateful dans sa norme dès le début. Une application HTTP/2 particulière peut utiliser un sous-ensemble des fonctionnalités de HTTP/2 pour maintenir la sans état, mais le protocole lui-même anticipe que l'état sera la norme, et non l'exception. L'erreur "HTTP est sans état" est un dogme ancien, loin de la réalité stateful moderne de HTTP et théoriquement, dans la pratique, vous utilisez le HTTP de manière stateful dans votre vie quotidienne.