Je passe d'un développeur de bureau à un développeur Web et j'ai du mal à comprendre pourquoi HTTP est sans état. Quelles en sont les raisons? De quelles manières un développeur de bureau comme moi peut-il effectuer la transition vers un environnement de développement sans état?
15
Réponses:
C'est la meilleure explication de l'Internet sans état que j'ai vue:
Comment j'ai expliqué REST à ma femme
http://www.looah.com/source/view/2284
la source
Comment pensez-vous qu'il serait possible de stocker l'état de milliards de milliards de milliards de milliards de connexions? :) Ainsi, vous ne stockez l'état que si nécessaire, dans les sessions.
BTW: HTTP n'est pas sans connexion.
la source
persistent connections
, c'est ce qu'on appelle garder en vie. Je ne suis pas un expert en réseau mais, vous avez une vraie connexion HTTP la plupart du temps :)En tant que développeur de bureau, vous pouvez être plus à l'aise avec des expériences d'interface utilisateur riches. Passer au Web, c'est comme prendre du recul. Dans le monde du Web, il y a moins de liberté de créativité et cela peut vous donner un sentiment de contrainte. Ne vous laissez pas abattre! Il existe un certain nombre de choses qui peuvent vous aider à faire la transition et en voici une courte liste:
Bonne programmation!
la source
Parce qu'il fut un temps où il n'y avait pas des millions et des millions de pages Web. Parce qu'il fut un temps où seules les universités et les centres de recherche disposaient de quelques pages. Il fut un temps où il n'y avait pas de large bande, et http était communiqué avec 1200 modems en bauds placés sur des téléphones de bureau. Il fut un temps où des «applications Web riches» auraient nécessité, selon elles, une bande passante ridicule. Et rappelez-vous, TCP / IP a été créé parce que le début d'Internet n'était pas très fiable.
HTTP 1.0 existait au début des années 1990. Réfléchissez à la façon dont Internet d'alors était, et pourquoi ils l'ont conçu comme ils l'ont fait.
la source
Tout cela a évolué. Internet existait avant les navigateurs Web et le Web. C'était un pot bouillonnant de ftp, telnet, gopher, ping, finger et quelques autres bits et bobs. Le premier navigateur Web, Mosaic (? Je pense, c'était il y a longtemps, 1991 je pense, j'étais au collège) a agi comme une sorte de méli-mélo entre ftp et un visualiseur de documents. La magie s'est produite en ce que vous pouviez avoir des liens dans le document qui pourraient créer un nouveau document.
Toute l'interactivité que nous avons maintenant évoluée au cours des 20 années suivantes. Ce n'était pas non plus une évolution heureuse. Nous avons eu les guerres des navigateurs, IE et Netscape l'ont éliminé pour le contrôle des normes (un peu de simplification;)), et divers autres tiers ont commencé à introduire des plug-ins pour permettre un contenu riche. Java allait être la balle magique et bien sûr Flash. Est-ce que quelqu'un se souvient des plug-ins VRML qui promettaient des mondes 3D et livraient exactement une demi-douzaine de modèles 3D de modèles Star Wars?
Je me suis un peu emporté vers la fin, mais vous voyez l'idée :)
la source
Les principales raisons ont à voir avec une combinaison de ce que l'acédémie croyait que le but du HTTP était, et pour des raisons d'évolutivité. HTML a été initialement conçu pour partager des informations ou des thèses au-delà des frontières académiques. C'était un texte purement stylisé. Ce n'est que lorsque le premier navigateur vous a permis de diffuser des images que les gens ont commencé à penser au-delà de ce modèle.
Les considérations suivantes ont solidifié la décision d'apatridie:
À mesure que les pages Web devenaient plus complexes et comprenaient de nombreux graphiques et feuilles de style, HTTP a été modifié avec le drapeau "keep-alive". Cela garderait le socket actif et permettrait au client de demander plusieurs ressources avec la même conversation.
Compte tenu du modèle d'utilisation actuel d'Internet, la décision initiale est toujours valable. Cela peut parfois être gênant, mais plusieurs petites interactions quantifiées avec un serveur évoluent mieux que les sockets inactives.
la source
Si vous parlez de navigateurs bidirectionnels.
Raisons de sécurité.
Par exemple SPAM !.
Faire passer la communication bidirectionnelle sur le Web au niveau supérieur
Sinon, Internet exécute TCP / IP (deux protocoles) et UDP.
la source
Dans une application de bureau, l'utilisateur est supposé effectuer une série de tâches, avec un début et une fin définis. Dans une telle application, il est logique (pas beaucoup, en fait) que les utilisateurs se connectent au serveur qui fournit leurs données et restent connectés jusqu'à ce qu'ils aient terminé.
Les interactions Web ne suivent pas (généralement) le même modèle. Dans un site de commerce électronique, par exemple, un utilisateur peut arriver à une description de produit à la suite d'une recherche Google et quitter immédiatement cette page pour regarder l'offre d'un autre site du même produit. Ou il / elle peut commencer le processus de paiement, puis décider que le produit est trop cher et l'abandonner à mi-parcours. L'idée de base de «l'hypertexte» implique la capacité et l'attente de sauter d'un endroit à un autre.
Les connexions permanentes consomment des ressources. Peut-être juste un socket réseau, peut-être un pool de requêtes de base de données analysées; tout dépend de l'application. Étant donné qu'un utilisateur peut disparaître à tout moment, il n'est pas très logique de maintenir ces ressources engagées.
En pratique, l'utilisateur n'a pas vraiment besoin d'avoir une connexion permanente. L'application Web maintient des connexions à toutes les ressources (par exemple, la base de données) dont elle a besoin et les partage entre toutes les demandes des utilisateurs. Le cadre d'application Web fournit des sessions, qui sont des lieux limités dans le temps pour stocker des données par utilisateur pour différentes demandes. La seule chose que vous ne pouvez pas faire (facilement) est d'avoir des transactions contrôlées par le client de longue durée, mais c'est une mauvaise idée même dans une application qui maintient des connexions.
la source
Internet n'est pas nécessairement apatride - en fait, lorsque vous regardez Java EE - ils ont des EJB avec état et des EJB sans état.
La raison principale pour laquelle les développeurs recommandent d'utiliser une architecture sans état est en raison de l'évolutivité. Imaginez-vous essayer de garder l'état de tous vos utilisateurs une fois que vous ajoutez et supprimez des serveurs pour prendre en charge votre trafic.
Ce n'est vraiment pas difficile de développer une architecture sans état. L'essentiel est de conserver le moins possible d'état (généralement un identifiant utilisateur - de préférence dans un cookie) et de modifier la base de données selon les besoins.
la source
Je pense que cela a commencé de cette façon et a continué de l'être. Maintenant qu'il y a tellement d'infrastructures construites autour d'elle, il est impossible de la changer.
Peut-être qu'il a commencé sans état, car les connexions étaient moins fiables au début, et la bande passante était également plus petite. Si vous n'avez pas beaucoup de connexions actives, vous pouvez gérer plus de trafic plus facilement.
Veuillez modifier ou laisser un commentaire si vous avez de meilleures informations, ou mieux encore, postez votre propre réponse!
la source
C'est parce que les serveurs fournissent un service (c'est dans le nom). Vous faites une demande et recevez des réponses - c'est tout ce qu'il y a à faire.
En ce qui concerne la transition vers le développement Web, je crois que les formulaires Web ASP.NET le feront d'une manière qui vous sera plus compréhensible - mais ce n'est que parce qu'il cache ce qui se passe réellement sous des couches d'abstraction.
la source
Beaucoup peut être compris en analysant le nom de HTTP (HyperText Transfer Protocol). Il n'a jamais été conçu pour être un protocole d'interface utilisateur riche. L'idée originale était de partager des documents avec des liens entre eux. Je vous demande un document, vous répondez avec une copie de ce document.
À l'origine, HTTP n'avait qu'un seul verbe GET. À cet égard, il a été conçu pour le contenu statique. Pourquoi avez-vous besoin d'indiquer quand tout ce que vous faites est de demander un document que quelqu'un partage? Et c'est pourquoi HTTP est apatride ... en raison de ses origines.
la source