Estoy pasando de ser un desarrollador de escritorio a un desarrollador web, y tengo problemas para entender por qué HTTP no tiene estado. ¿Cuáles son las razones para ello? ¿De qué maneras un desarrollador de escritorio como yo puede hacer la transición a un entorno de desarrollo sin estado?
15
Respuestas:
Esta es la mejor explicación de Internet sin estado que he visto:
Cómo le expliqué REST a mi esposa
http://www.looah.com/source/view/2284
fuente
¿Cómo crees que sería posible almacenar el estado de miles de millones de miles de millones de miles de millones de conexiones? :) Por lo tanto, solo almacena el estado donde sea necesario, en sesiones.
Por cierto: HTTP no es sin conexión.
fuente
persistent connections
, eso se llama mantener vivo. No soy un experto en redes, pero tienes una conexión real en HTTP la mayor parte del tiempo :)Como desarrollador de escritorio, puede sentirse más cómodo con experiencias ricas de IU. Pasar a la web puede parecer un paso atrás. En el mundo web, hay menos libertad de creatividad y puede darte una sensación de restricción. ¡No dejes que eso te deprima! Hay varias cosas por ahí que pueden ayudarlo a hacer la transición y aquí hay una breve lista de ellas:
¡Feliz programación!
fuente
Porque hubo un tiempo en el que no había millones y millones de páginas web. Porque hubo un tiempo en que solo las universidades y las instalaciones de investigación tenían un par de páginas. Hubo un tiempo en que no había banda ancha, y http se comunicaba con 1200 módems en baudios colocados encima de los teléfonos de escritorio. Hubo un momento en que las "aplicaciones web ricas" habrían requerido, en su opinión, una cantidad ridícula de ancho de banda. Y recuerde, TCP / IP se creó porque la Internet temprana era muy poco confiable.
HTTP 1.0 existía a principios de la década de 1990. Piense en cómo era Internet entonces y por qué lo diseñaron de la manera en que lo hicieron.
fuente
Todo evolucionó. Internet existía antes que los navegadores web y la Web. Era una olla burbujeante de ftp, telnet, gopher, ping, dedo y algunos otros bits y bobs. El primer navegador web, Mosaic (creo que fue hace mucho tiempo, 1991 creo que estaba en la universidad) actuó como una especie de mezcla entre ftp y un visor de documentos. La magia sucedió en el sentido de que podría tener enlaces en el documento que crearían un nuevo documento.
Toda la interactividad que hemos desarrollado en el transcurso de los siguientes 20 años. Tampoco fue una evolución feliz. Tuvimos la guerra de los navegadores, IE y Netscape lo rechazaron por el control de los estándares (un poco de simplificación;)), y varios otros terceros comenzaron a introducir complementos para permitir un contenido rico. Java iba a ser la bala mágica y, por supuesto, Flash. ¿Alguien recuerda los complementos VRML que prometían mundos en 3D y entregaron exactamente media docena de modelos en 3D de modelos de Star Wars?
Me dejé llevar un poco hacia el final, pero entiendes la idea :)
fuente
Las razones principales tienen que ver con una combinación de lo que acedemia creía que era el propósito de HTTP, y por razones de escalabilidad. HTML fue originalmente diseñado para compartir información o tesis a través de los límites académicos. Era texto puramente estilizado. No fue hasta que el primer navegador le permitió mostrar imágenes que la gente comenzó a pensar más allá de ese modelo.
Las siguientes consideraciones solidificaron la decisión apátrida:
A medida que las páginas web se volvieron más complejas e incluyeron muchos gráficos y hojas de estilo, HTTP fue enmendado con la bandera "keep-alive". Eso mantendría el socket activo y permitiría al cliente solicitar varios recursos con la misma conversación.
Teniendo en cuenta el modelo de uso actual de Internet, la decisión original sigue siendo válida. A veces puede ser inconveniente, pero varias interacciones pequeñas y cuantificadas con un servidor escalan mejor que los sockets inactivos.
fuente
Si te refieres a navegadores bidireccionales.
Razones de seguridad.
Por ejemplo SPAM !.
Llevando la comunicación bidireccional en la web al siguiente nivel
De lo contrario, Internet ejecuta TCP / IP (dos protocolos) y UDP.
fuente
En una aplicación de escritorio, se supone que el usuario realiza algunas series de tareas, con un inicio y un final definidos. En una aplicación de este tipo, tiene sentido (no mucho, en realidad) que los usuarios inicien sesión en cualquier servidor que proporcione sus datos y permanezcan conectados hasta que terminen.
Las interacciones web no siguen (típicamente) el mismo modelo. En un sitio de comercio electrónico, por ejemplo, un usuario puede llegar a una descripción del producto como resultado de una búsqueda en Google e inmediatamente abandonar esa página para ver la oferta de otro sitio del mismo producto. O puede comenzar el proceso de pago, luego decidir que el producto es demasiado costoso y abandonarlo a la mitad. La idea básica de "hipertexto" implica la capacidad y la expectativa de saltar de un lugar a otro.
Las conexiones permanentes consumen recursos. Quizás solo un socket de red, quizás un grupo de consultas de bases de datos analizadas; Todo depende de la aplicación. Dado un usuario que puede desaparecer en cualquier momento, no tiene mucho sentido mantener esos recursos comprometidos.
En la práctica, no hay necesidad real de que el usuario tenga una conexión permanente. La aplicación web mantiene conexiones a los recursos (p. Ej., Base de datos) que necesita y los comparte entre todas las solicitudes de los usuarios. El marco de la aplicación web proporciona sesiones, que son lugares de tiempo limitado para almacenar datos por usuario para diferentes solicitudes. Lo único que no puede hacer (fácilmente) es tener transacciones controladas por el cliente de larga duración, pero esa es una mala idea incluso en una aplicación que mantiene conexiones.
fuente
Internet no es necesariamente apátrida, de hecho cuando observa Java EE, tienen EJB con estado y EJB sin estado.
La razón principal por la que los desarrolladores recomiendan usar una arquitectura sin estado es debido a la escalabilidad. Imagine tratar de mantener el estado de todos sus usuarios una vez que agregue y descarte servidores para admitir su tráfico.
Realmente no es difícil desarrollar una arquitectura sin estado. El punto principal es mantener el menor estado posible (generalmente una identificación de usuario, preferiblemente en una cookie) y cambiar la base de datos según sea necesario.
fuente
Creo que comenzó de esa manera y siguió siendo así. Ahora que hay tanta infraestructura construida a su alrededor, es imposible cambiarla.
Quizás comenzó sin estado porque las conexiones eran menos confiables al principio, y también el ancho de banda era más pequeño. Si no tiene muchas conexiones activas, puede manejar más tráfico más fácilmente.
Edite o deje un comentario si tiene mejor información, o mejor aún, ¡publique su propia respuesta!
fuente
Es porque los servidores proporcionan un servicio (está en el nombre). Hace una solicitud y recibe respuestas, eso es todo.
Con respecto a hacer una transición al desarrollo web, creo que ASP.NET Web Forms lo hará de una manera más comprensible para usted, pero eso es solo porque oculta lo que realmente sucede bajo capas de abstracción.
fuente
Se puede entender mucho analizando el nombre de HTTP (Protocolo de transferencia de hipertexto). Nunca fue diseñado para ser un protocolo de interfaz de usuario rico. La idea original era compartir documentos con enlaces entre ellos. Le pido un documento, usted responde con una copia de ese documento.
Originalmente HTTP solo tenía un verbo GET. En ese sentido, fue diseñado para contenido estático. ¿Por qué necesita un estado cuando todo lo que está haciendo es solicitar un documento que alguien está compartiendo? Y es por eso que HTTP no tiene estado ... debido a sus orígenes.
fuente