Como o HTTP se torna sem estado?

26

O HTTP é considerado sem estado. Significa que não é necessário armazenar informações para a transmissão de dados.

Mas o HTTP usa o TCP, que é orientado pelo estado.

Se for esse o caso, como o HTTP se torna sem estado?

    
por Ant's 13.10.2014 / 04:00

4 respostas

42

O HTTP não se importa - e é independente - de qualquer um dos protocolos de nível mais baixo usados para se transportar, mesmo que seja ele próprio sem estado.

A tecnologia de transporte pode ser TCP, ou o antigo SPX da Novell, ou SCTP, ou qualquer outra coisa que você possa imaginar, e o HTTP ainda funcionará da mesma forma. O HTTP exige um protocolo orientado por streaming ou conexão - e depende da resolução de URLs, mas não se importa como isso é feito.

Esta é uma das razões pelas quais o modelo em camadas ou a pilha de rede existe: A camada de aplicativo não precisa preocupar-se com as camadas inferiores.

O fato de um protocolo de nível inferior ser stateful não significa que algo em cima dele se torne stateful ou que seja obrigatório.

O próprio HTTP é sem estado. Isso significa que os aplicativos precisam implementar outra camada em cima do HTTP para estabelecer o estado. Isso geralmente é feito com cookies de sessão.

    
por 13.10.2014 / 04:15
10

"HTTP é sem estado" significa que cada transação HTTP (par solicitação-resposta) pode ser processada independentemente de qualquer estado do par de solicitação-resposta anterior.

Para transportar o par pedido-resposta específico, você precisa de um protocolo que seja capaz de carregar blocos arbitrariamente grandes e grandes blocos de volta, e fazer isso em uma camada com tamanho limitado de pacotes, o TCP deve ser stateful.

Mas, além dos limites da transação, não há estado. O cliente pode descartar a conexão e estabelecer uma nova para a próxima solicitação. Na verdade, essa era a única opção nas primeiras versões e ainda funciona assim se o cliente não incluir o cabeçalho Connection: keep-alive .

O próximo pedido também pode ser facilmente manipulado por um servidor diferente e o cliente nunca saberá, porque o servidor não precisa manter nenhum estado (a menos que o aplicativo adicione seu próprio estado em cima do HTTP, geralmente em forma de sessão; as consequentes complicações no balanceamento de carga são sua punição para construir um protocolo stateful no HTTP). Isso é aproveitado em servidores ocupados com balanceamento de carga.

    
por 13.10.2014 / 14:34
2

A natureza "sem estado" do HTTP significa que, nessa camada , nenhuma informação de estado é criada ou usada.

Você pode ver isso em algumas instâncias, por exemplo, na autenticação HTTP, as credenciais são enviadas a cada solicitação e as conexões persistentes são realmente apenas uma otimização (ou seja, se eu enviar credenciais, o servidor as esquece após a solicitação, mesmo se deixar a conexão aberta).

Por outro lado, os mecanismos de login baseados em cookies são stateful, mas não fazem parte do HTTP.

    
por 13.10.2014 / 14:35
1

Você tem que entendê-lo como um conjunto de bonecas russas (ou caixas, se você quiser), cada uma carregando uma outra dentro, que é grosseiramente como funciona: o TCP carrega o HTTP "dentro", mas não se importa com isso ou são recursos.

Para obter uma visão geral, recomendo que você leia sobre o Modelo OSI , pois ele fica mais claro.

O TCP fica algumas camadas abaixo do HTTP no modelo OSI, cada camada de fato corresponde a um protocolo diferente.

No nosso caso, o HTTP está nas camadas de apresentação e aplicação e o TCP na camada de transporte. Ou, se você usar o Modelo TCP / IP, os protocolos TCP e IP estarão na camada Link de Rede e HTTP nas camadas de aplicativo e apresentação.

    
por 13.10.2014 / 13:07