Noções de HTTP
Tags: beginners, braziliandevs
Published: 2022-06-06 16:22:13

**HTTP:**
	
O HTTP é o protocolo mais importante da internet, ele é utilizado pela grande maioria das aplicações web e ele independe da plataforma de desenvolvimento;

HTTP é a sigla de "HyperText Transfer Protocol", ou seja, um protocolo para transferência de texto (puro).

Esse protocolo determina as regras da comunicação entre o cliente e servidor na internet. Sendo o cliente e o servidor conceitos que representam "aquele que faz a requisição (pergunta)" e "aquele que responde a essa requisição", é sempre o cliente que inicia a comunicação. A comunicação em HTTP é conhecida como Request-Response. Como exemplo podemos citar um navegador que envia uma requisição e uma API - que independente da linguagem utilizada- que responde essa requisição.

O HTTP é stateless, ou seja, ele por si só não guardar o estado das requisições enviadas, dessa forma é necessário fazer o envio de todas as informações que em cada sessão, durante a navegação pelo site.

Por exemplo ao fazer o login em site de notícias seria necessário envia a requisição com e-mail e senha ao se logar, quando fosse navegar pelas notícias seria necessário enviar novamente essas informações a cada notícia que você entrasse para ler, isso além de muito trabalhoso também seria inseguro ficar trafegando com informações "sensíveis" a cada sessão, para resolver essa questão são utilizado os cookies.

Mas o que são os cookies? Se tratando de HTTP podemos dizer que os cookies são arquivos que guardam um token de identificação do cliente, no navegador, para que não seja necessário o envio de todas informações a cada requisição, com funciona ao se logar o cliente envia o e-mail e senha (por exemplo) o servidor ao receber essas informações gera um token (uma chave de números aleatórios) que identifica esse cliente e devolve ao cliente "dizendo 'Olha essa é sua identificação nas próximas requisições é só me enviar esse token que eu já vou saber que é você, ok!".

**HTTPS:**

Ao se enviar dados em uma requisição HTTP ela pode passar por diversos servidores até chegar no destino final e isso deixa os dados enviados expostos por se tratar de uma transferência de texto puro, devido a demanda de proteger os dados que trafegam na internet foi criado o HTTPS, que é o HTTP comum associado a uma camada de segurança/criptografia, que é a SSL/TSL (Secure Sockets Layer/ Transport Layer Security), na prática o que ocorre é que os dados não são mais enviados como texto puro e sim como um texto criptografado, sendo que apenas o servidor de destino final tem a chave para acessar esse texto.



A criptografia utilizada pela SSL/TSL se baseia em pares de chaves públicas e privadas. As chaves públicas ficam a disposição do cliente e é ela que irá criptar os dados enviados, a chave privada fica de posse exclusivamente do servidor e ela será utilizada para descriptografar a mensagem recebida. As chaves são geradas por uma autoridade certificadora para garantir essa segurança e legitimidade, ela emite um certificado digital que atrela a identidade do site as chaves geradas, esse certificado tem validade.

**HTTP/2:**

O HTTP/2 é um update do HTTP, ele surgiu para adequar o protocolo para o cenário onde há uma quantidade muito maior de dados sendo trafegados pela rede, e a velocidade de acesso e segurança são pontos fundamentais. O HTTP/2 possui diversas tecnologias de compactação da requisição. Os dados da resposta são compactadas utilizando o GZIP (No servidor), as mensagens (enviada no headers) tanto da requesição quanto resposta passam a transportar dados binários e não mais o texto puro, além de binário elas são comprimidas usando um algoritmo chamado HPACK, fazendo com que o volume de dados trafegados diminua bastante, todas essas melhorias levam a um ganho de performance na comunicação cliente-servidor. Mas não para por ai, o HTTP/2 já tem uma atenção para segurança, por padrão ele exige a aplicação do TLS, ou seja, o HTTP/2 pega as informações altamente compactadas e criptografa antes do envio.

O HTTP/2 é stateful, ele guarda as informações do header no primeiro envio, não sendo necessário enviar todas as informações a cada requisição.