web-dev-qa-db-fra.com

protocole sans état et protocole avec état

Comment comprendre le protocole sans état et le protocole avec état? HTTP est un protocole sans état et FTP est un protocole avec état. Pour les applications Web nécessitant de nombreuses interactions, le protocole sous-jacent doit être avec état. Ma compréhension est-elle correcte?

32
user288609

Puisque vous posez des questions sur une application Web, le protocole sera toujours sans état - le protocole pour le Web est http (ou https), et c'est tout ce qu'elle a écrit.

Je pense que vous pensez à fournir un mécanisme d'état dans votre application Web elle-même. L'approche typique consiste à créer un identifiant unique pour la session de l'utilisateur dans votre application Web (un ID de session d'une forme ou d'une autre est la pratique courante) qui est transmis entre le navigateur et le serveur. Cela se fait généralement dans un cookie, bien que cela puisse être fait, avec un peu plus de tracas pour vous en fonction de votre plate-forme/infrastructure, sur l'URL également.

Votre code côté serveur stocke des informations avec état (là encore, généralement appelé session de l'utilisateur), mais il souhaite utiliser l'ID de session pour le rechercher. Le trafic http restitue simplement le sessionID. Tant que cet identifiant est là, chaque transaction http est complètement indépendante de toutes les autres, donc le trafic de protocole lui-même est sans état.

14
Paul Degnan

HTTP est un protocole sans état, dans un autre Word, le serveur oubliera tout ce qui concerne l'état du client/navigateur. Bien que les applications Web l'aient rendu pratiquement dynamique.

Un protocole sans état peut être forcé de se comporter comme s'il était avec état. Cela peut être accompli si le serveur envoie l'état au client et si le client le renvoie à nouveau au serveur, à chaque fois.

Il y a trois façons de procéder en HTTP:

a) L'un est les cookies, auquel cas l'état est envoyé et renvoyé dans les en-têtes HTTP.

b) La seconde est l'extension URL, auquel cas l'état est envoyé en tant que partie de l'URL comme réponse.

c) Le troisième est "les champs de formulaire cachés", dans lesquels l'état est envoyé au client dans le cadre de la réponse, et renvoyé au serveur dans le cadre des données masquées d'un formulaire

ÉVOLUTIVITÉ ET HAUTE DISPONIBILITÉ

L'une des principales raisons pour lesquelles HTTP évolue si bien est son apatridie. Le protocole sans état atténue les problèmes de réplication, car l'état lui-même n'a pas besoin d'être stocké sur le serveur.

Les protocoles avec état sont logiquement lourds à implémenter de manière fiable sur Internet. Les serveurs sans état sont également facilement évolutifs, tandis que pour les serveurs avec état, l'évolutivité est problématique. La demande sans état peut être envoyée à n'importe quel nœud, à tout moment, alors qu'avec Stateful, ce n'est pas le cas.

HTTP en tant que protocole sans état augmente la disponibilité des applications Web sans état, qui autrement seraient difficiles ou impossibles à mettre en œuvre. Si la connexion est perdue, aucun état n'est perdu, une simple demande de renvoi résoudra le problème. Les demandes sans état peuvent également être mises en cache.

voir plus ici

42
jjpcondor

http est un protocole sans état. Toutes les applications Web sont sans état. lorsqu'une demande est envoyée au serveur, une connexion est établie entre le client et le serveur, le serveur reçoit la demande, traite la demande et renvoie la réponse., et la connexion est fermée. si une autre demande est envoyée, elle sera traitée comme une nouvelle demande et une nouvelle connexion sera établie. afin de rendre http avec état. nous utilisons des techniques de gestion de session. de sorte qu'il utilise les données provenant de la requête précédente lors du traitement de la requête actuelle, c'est-à-dire qu'il utilise la même connexion pour une série d'interactions client-serveur. les techniques de gestion de session sont les suivantes: 1. champ de formulaire masqué 2. cookie 3. session 4. réécriture en url;

3
ayyappa

Votre question est claire, et oui, ce serait bien si vos transactions Web avec votre banque étaient effectuées via une connexion avec état. Hélas, HTTP est sans état en raison d'un bug bizarre dans FTP et d'une limite de 12 sockets dans la table de sockets partielle dans BSD de 1989. Marcus Ranum a tout expliqué ici .

HTTP jette donc l'état dont il hérite TCP et doit recréer l'état au niveau de la couche application sous forme de cookies. La sécurité Internet est le résultat.

Le projet Seif propose de corriger tout cela en utilisant "JSON sécurisé sur TCP". Le DNS et les autorités de certification ne sont pas requis. Le protocole et seifnode.js sont terminés et sur github avec une licence MIT.

2
user2628103

HTTP n'hérite pas de TCP, mais l'utilise plutôt pour un transport. HTTP utilise TCP pour une connexion avec état, mais se déconnecte ensuite. Plus tard, il se connectera à nouveau si nécessaire. Ainsi, lorsque vous parcourez un site Web, vous créez de nombreuses connexions différentes. Chacune de ces connexions est avec état, mais la conversation dans son ensemble ne l'est pas, car vous perdez la connexion avec chaque conversation.

à partir de ce lien

1
walkerbox

Fondamentalement oui, mais vous n'avez pas d'autre choix que d'utiliser HTTP qui est l'endroit où les sites Web sont servis. Vous devez donc faire face aux compromis pour rendre HTTP avec état, c'est-à-dire la gestion de session. Les possibilités sont essentiellement de transmettre un identifiant de session à chaque appel dans l'URL afin que vous sachiez quand vous parlez à quelqu'un dont vous avez parlé auparavant, ou via des cookies, qui atteignent le même objectif sans encombrer l'URL. Cependant, la plupart des langages de développement Web modernes s'en occupent pour vous; si vous google pour la langue de votre choix + "gestion de session", vous devriez avoir une idée de la façon dont cela se fait.

0
Nicolas78