HTTP e HTTPS simplão
Não é novidade para ninguém que a internet é nada mais nada menos do que uma comunicação de dados entre pontos extremos, ou seja, um emissor envia um pedido e na outra ponta um receptor recebe esse mesmo pedido. Só que até na vida real, para duas pessoas conseguirem se comunicar, são necessárias normas que tornem o conteúdo da mensagem interpretável pela outra ponta, como por exemplo: o idioma utilizado.
Com a internet não é diferente, por esse motivo que o hypertext transfer protocol, ou Protocolo de Transferência de Hipertexto, vulgo HTTP foi criado, para trazer regras que permitem a ubiquidade comunicativa por meio da web, de forma que o cliente e o servidor transmitam dados em um formato comum de comunicação .
E é desta maneira que o navegador (cliente) consegue atender as solicitações do usuário e envia-las ao servidor para que o mesmo decida o que fazer com o pedido, podendo devolver uma mensagem de erro, um conteúdo, ou até mesmo não fazer nada, mas ai já é uma brisa que diz respeito à APIs.
HTTPS
Pô, mas acho que todo mundo sempre se pergunta qual a diferença entre o HTTP e o HTTPS, bem fácil, o S no final de HTTPS significa: Secure. Então se HTTP significa: protocolo de transferência de hipertexto; logo HTTPS significa: protocolo de transferência de hipertexto seguro.
Essa tal segurança prometida, trata-se de uma camada de criptografia chamada de SSL/TLS, também conhecidas como: Secure Sockets Layer / Transport Layer Security. Essa camada de segurança é justamente responsável por criptografar o conteúdo da mensagem que por sua vez era enviado como texto puro no HTTP, em um modelo de criptografia baseada em chaves: públicas e privadas.
As chaves são geradas com base na identidade de quem possui essas chaves, esse processo é realizado através da criação de um certificado digital, provando a existência dessa identidade. Com as chaves geradas então o navegador faz o uso dessas chaves para realizar a criptografia dos dados.
Como acontece a comunicação ?
Tanto o HTTP quanto o HTTPS foram projetados para comunicação entre navegadores e servidores da web, mas também possuem outros fins. Esses protocolos estão sempre trabalhando em conjunto com mais outros dois protocolos, o Transmission Control Protocol (TCP) que é responsável pela transferência das informações, e o Internet Protocol (IP) que cuida dos encaminhamentos dos dados, geralmente são vistos de forma conjunta como TCP/IP.
O protocolo HTTP trabalha em um modelo de request (pedido feito ao servidor) e response (resposta devolvida), exemplo, um navegador realiza um acesso à um site então ele faz um pedido para o servidor que devolve uma resposta geralmente em HTML ou JSON, após esse processo de pedido e resposta a conexão é encerrada, sendo necessário repetir o ciclo cada vez que um pedido é realizado (conexão não persistente).
Modelo de requisição HTTP
Request Message Header
É aqui que esperamos o Request line contendo as seguintes informações:
- Identificador do método: Tipo de ação que esperamos do servidor, também chamado de “verbo” (ex: GET, POST).
- URI do Recurso: Endereço no qual será enviado o pedido (ex: /order/confirmed_orders).
- Versão do protocolo: Versão do HTTP em uso (ex: HTTP/1.1 ou HTTP/2)
Em seguida temos os Request Headers, são campos que contém informações adicionais sobre a requisição, compostos por seu nome, seguido por dois pontos ‘ : ’ e pelo seu valor (sem quebras de linha). Espaços em branco antes do valor serão ignorados.
Cabeçalho genérico: Cabeçalhos que podem ser usados tanto em solicitações quanto em respostas, porém sem relação com os dados eventualmente transmitidos no corpo da mensagem.
Cabeçalho de solicitação: Cabeçalhos contendo mais informação sobre o recurso a ser obtido ou sobre o próprio cliente.
Cabeçalho de resposta (en-US): Cabeçalhos contendo informação adicional sobre a solicitação, como a sua localização ou sobre o servidor.
Cabeçalho de entidade: Cabeçalhos contendo mais informação sobre o conteúdo da entidade, como o tamanho do conteúdo ou o seu MIME-type.
Request Message Body
É no corpo da mensagem da requisição que vai o conteúdo em si que está sendo transferido, APIs REST mesmo utilizam o formato JSON para ordenar o conteúdo da mensagem.
Modelo de resposta HTTP
O formato de uma resposta HTTP é bem parecida com o formato de requisição, mudando apenas pequenas particularidades.
Request Message Header
Continua possuindo o Request line mas que dessa vez ao invés de possuir a URI do Recurso, agora possui um Response Status Code ou Código Numérico do Status. Sendo assim: Versão do protocolo, status numérico, descrição do status em texto.
- Código Numérico do Status: Número em 3 dígitos que corresponde como o pedido foi condicionado no servidor. As respostas são agrupadas em 5 classes:
Respostas de informação (
100
-199
),Respostas de sucesso (
200
-299
),Redirecionamentos (
300
-399
)Erros do cliente (
400
-499
)Erros do servidor (
500
-599
).
Todo o resto segue o mesmo formato da requisição HTTP, com exceção de alguns headers que também são alterados ou removidos.
Referências
- https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Overview
- https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol
- https://kenzie.com.br/blog/diferenca-protocolo-http-https/
- https://www.alura.com.br/artigos/desmistificando-o-protocolo-http-parte-1
- https://www.neomind.com.br/blog/diferencas-entre-http1-1-e-http2/