Estou passando de desenvolvedor de desktop para desenvolvedor web e estou tendo problemas para entender por que o HTTP não tem estado. Quais são as razões para isso? Quais são algumas maneiras pelas quais um desenvolvedor de desktop como eu pode fazer a transição para um ambiente de desenvolvimento sem estado?
15
Respostas:
Esta é a melhor explicação da internet sem estado que eu já vi:
Como expliquei o REST para minha esposa
http://www.looah.com/source/view/2284
fonte
Como você acha que seria possível armazenar o estado de bilhões de bilhões de bilhões de conexões de bilhões? :) Portanto, você armazena apenas o estado onde necessário, em sessões.
BTW: HTTP não está sem conexão.
fonte
persistent connections
, isso é chamado de manter ativo. Eu não sou um especialista em rede, mas, você tem uma conexão real em HTTP maior parte do tempo :)Como desenvolvedor de desktop, você pode se sentir mais confortável com experiências ricas da interface do usuário. Mudar para a Web pode parecer um passo atrás. No mundo da web, há menos liberdade de criatividade e isso pode lhe dar uma sensação de restrição. Não deixe que isso te decepcione! Existem várias coisas por aí que podem ajudá-lo a fazer a transição e aqui está uma pequena lista delas:
Boa programação!
fonte
Porque houve um tempo em que não havia milhões e milhões de páginas da web. Porque houve um tempo em que apenas universidades e instalações de pesquisa tinham algumas páginas. Houve um tempo em que não havia banda larga e o http foi comunicado com modems de 1200 baud colocados em cima dos telefones de mesa. Houve um tempo em que "aplicativos da web avançados" exigiam, na visão deles, uma quantidade ridícula de largura de banda. E lembre-se, o TCP / IP foi criado porque a Internet inicial não era muito confiável.
O HTTP 1.0 existia no início dos anos 90. Pense em como era a Internet da época e por que eles a projetaram da maneira que fizeram.
fonte
Tudo meio que evoluiu. A Internet existia antes dos navegadores e da Web. Era um pote borbulhante de ftp, telnet, gopher, ping, dedo e alguns outros pedaços. O primeiro navegador da web, Mosaic (acho que foi há muito tempo, 1991, acho que estava na faculdade) agia como uma espécie de confusão entre o ftp e o visualizador de documentos. A mágica aconteceu porque você poderia ter links no documento que aumentariam o tamanho de um novo documento.
Toda a interatividade que evoluímos ao longo dos próximos 20 anos. Também não foi uma evolução feliz. Tivemos as guerras entre navegadores, o IE e a Netscape disputaram o controle de padrões (um pouco de simplificação;)), e vários outros terceiros começaram a introduzir plug-ins para permitir conteúdo rico. Java seria a bala mágica e, claro, o Flash. Alguém se lembra dos plug-ins VRML que prometiam mundos 3D e entregavam exatamente meia dúzia de modelos 3D de modelos Star Wars?
Fiquei um pouco empolgado no final, mas você entendeu a ideia :)
fonte
Os principais motivos têm a ver com uma combinação do que a acedemia acreditava ser o objetivo do HTTP e por razões de escalabilidade. O HTML foi originalmente projetado para compartilhar informações ou teses através dos limites acadêmicos. Era um texto puramente estilizado. Não foi até o primeiro navegador permitir que você exibisse fotos que as pessoas começaram a pensar além desse modelo.
As considerações a seguir solidificaram a decisão apátrida:
À medida que as páginas da Web se tornaram mais complexas e incluíam muitos gráficos e folhas de estilo, o HTTP foi corrigido com o sinalizador "keep-alive". Isso manteria o soquete ativo e permitiria ao cliente solicitar vários recursos com a mesma conversa.
Considerando o modelo de uso atual da Internet, a decisão original ainda é válida. Às vezes, pode ser inconveniente, mas várias interações pequenas e quantizadas com um servidor são dimensionadas melhor do que soquetes ociosos.
fonte
Se você quer dizer navegadores bidirecionais.
Razões de segurança.
Por exemplo SPAM !.
Levando a comunicação bidirecional na Web para o próximo nível
Caso contrário, a Internet executa TCP / IP (dois protocolos) e UDP.
fonte
Em um aplicativo de desktop, presume-se que o usuário esteja executando algumas séries de tarefas, com início e fim definidos. Em um aplicativo como esse, faz algum sentido (na verdade, não muito) que os usuários efetuem login em qualquer servidor que forneça seus dados e permaneçam conectados até que terminem.
As interações na Web (normalmente) não seguem o mesmo modelo. Em um site de comércio eletrônico, por exemplo, um usuário pode chegar a uma descrição do produto como resultado de uma pesquisa no Google e sair imediatamente dessa página para ver a oferta de outro site do mesmo produto. Ou então, ele pode iniciar o processo de pagamento e depois decidir que o produto é muito caro e abandoná-lo na metade. A idéia básica de "hipertexto" implica a capacidade e a expectativa de saltar de um local para outro.
Conexões permanentes consomem recursos. Talvez apenas um soquete de rede, talvez um pool de consultas de banco de dados analisadas; tudo depende da aplicação. Dado um usuário que pode desaparecer a qualquer momento, não faz muito sentido manter esses recursos comprometidos.
Na prática, não há necessidade real de o usuário ter uma conexão permanente. O aplicativo da web mantém conexões com quaisquer recursos (por exemplo, banco de dados) necessários e os compartilha entre todas as solicitações do usuário. A estrutura do aplicativo da web fornece sessões, que são locais com tempo limitado para armazenar dados por usuário para diferentes solicitações. A única coisa que você não pode fazer (facilmente) é ter transações controladas por clientes de longa execução, mas isso é uma má ideia, mesmo em um aplicativo que mantém conexões.
fonte
A Internet não é necessariamente sem estado - na verdade, quando você olha para o Java EE - eles têm EJBs com estado e EJBs sem estado.
A principal razão pela qual os desenvolvedores recomendam o uso de uma arquitetura sem estado é por causa da escalabilidade. Imagine tentar manter o estado de todos os seus usuários depois de adicionar e remover servidores para dar suporte ao seu tráfego.
Realmente não é difícil desenvolver uma arquitetura sem estado. O ponto principal é manter o mínimo de estado possível (geralmente um ID de usuário - de preferência em um cookie) e alterar o banco de dados conforme necessário.
fonte
Eu acho que começou assim e continuou sendo assim. Agora que há tanta infraestrutura construída em torno dele, é impossível alterá-la.
Talvez tenha começado sem estado porque as conexões eram menos confiáveis no início e também a largura de banda era menor. Se você não tiver muitas conexões ativas, poderá lidar com mais tráfego com mais facilidade.
Por favor, edite ou deixe um comentário, se você tiver melhores informações, ou melhor ainda, poste sua própria resposta!
fonte
Isso porque os servidores fornecem um serviço (está no nome). Você faz uma solicitação e recebe respostas - isso é tudo.
No que diz respeito a fazer uma transição para o desenvolvimento da Web, acredito que o ASP.NET Web Forms fará isso de uma maneira que seja mais compreensível para você - mas é apenas porque oculta o que realmente está acontecendo sob as camadas de abstração.
fonte
Muito pode ser entendido analisando o nome do HTTP (HyperText Transfer Protocol). Ele nunca foi projetado para ser um rico protocolo de interface do usuário. A idéia original era compartilhar documentos com links entre eles. Peço um documento, você responde com uma cópia desse documento.
Originalmente, o HTTP tinha apenas um verbo GET. Nesse sentido, ele foi projetado para conteúdo estático. Por que você precisa indicar quando tudo o que você está fazendo é solicitar um documento que alguém está compartilhando? E é por isso que o HTTP é sem estado ... por causa de suas origens.
fonte