2
respostas

HTTP é stateless ou stateful?

Fiquei com uma dúvida conceitual. Pelo que entendi o HTTP é stateless, ou seja, uma requisição é completamente independente da outra. Mas isso me pareceu contraditório quando analisamos os cookies, já que uma nova requisição precisará utilizar dados recebidos em requisições anteriores (como o sessionId por exemplo). A mesma confusão me ocorreu com a explicação sobre a versão do HTTP/2 ser stateful. Afinal, http é realmente stateless? Como pode o protocolo ser stateless e stateful ao mesmo tempo?

2 respostas

Segundo as respostas que eu encontrei, o protocolo HTTP é stateless, mas pode ser gerenciado para se comportar como stateful em algumas situações.

Leia aqui: https://stackoverflow.com/questions/5836881/stateless-protocol-and-stateful-protocol#:~:text=HTTP%20is%20a%20stateless%20protocol,protocol%20should%20be%20stateful%20ones.

Pelo o que entendi dos vídeos do curso acho que uma expressão que se encaixa bem aqui é que uma coisa é uma coisa e outra coisa é outra coisa.

O HTTP é um protocolo de comunicação web e o HTTP/2 é outro protocolo, e embora o segundo seja derivado do primeiro, o protocolo HTTP/2 possui suas próprias regras de funcinamento. Assim como a língua portuguesa é derivada do latim, mas ambas são independentes uma da outra. Desse modo, mesmo que o protocolo HTTP seja stateless por padrão, o protocolo HTTP/2 não o é.

Falando agora a respeito dos cookies, a característica stateless do protocolo HTTP diz respeito ao cabeçalho da request que é enviada para o servidor e não aos dados que são enviados para o servidor. Assim, mesmo o protocolo HTTP/2 sendo stateful, ele também faz uso dos cookies, já que as informações contidas nos cookies não estão inseridas no cabeçalho da request.

Ou seja, ao usarmos o HTTP não temos o reaproveitamento do cabelho da request, enquanto que no HTTP/2 nós temos. Mas em ambos os casos precisamos enviar os identificadores contidos nos cookies.