Visão geral sobre o HTTP

mdcg

Mauro de Carvalho

Posted on June 21, 2022

Visão geral sobre o HTTP

HTTP é uma sigla para Hypertext Transfer Protocol, que significa: Protocolo de Transferência de Hipertexto. Basicamente, HTTP é um protocolo que permite a obtenção de recursos, como por exemplo: documentos HTML, imagens, vídeos, etc.

Ele é considerado um protocolo “Cliente-Servidor”, ou seja, ele determina padrões e define as regras para a troca de informações entre clientes e servidores. O WWW (World Wide Web) é totalmente construído com base na comunicação de clientes e servidores web.

A comunicação entre clientes e servidores é feita através da troca de mensagens individuais que são divididas entre as solicitações (requests) e respostas (responses). As mensagens enviadas pelo cliente (geralmente um navegador) a fim de se obter algum recurso é tida como request. Já a mensagem de resposta da solicitação enviada pelo servidor é tida como response.

PS: É válido ressaltar que as requisições são sempre iniciadas pelo destinatário (cliente).

O HTTP é um “protocolo da camada de aplicação”, que é executado no topo da pilha do modelo TCP/IP. O HTTP é enviado sobre o protocolo TCP, onde basicamente será criada uma conexão entre o cliente e o servidor, que será iniciada no momento do envio da solicitação, e após a resposta, a conexão será finalizada. Devido a essa característica, é dito que o HTTP é sem estado (stateless), já que não existe uma relação entre duas requisições sendo feitas através da mesma conexão.

Características do HTTP

  • Simplicidade: O HTTP foi projetado para ser de fácil legibilidade aos seres humanos. As mensagens podem ser entendidas por qualquer pessoa, facilitando o desenvolvimento e testes;
  • Extensível: Os cabeçalhos HTTP fazem com que o protocolo seja fácil de “estender”. Novas funcionalidades podem ser introduzidas pelo simples acordo entre um cliente e um servidor utilizando a semântica de um cabeçalho;
  • Sem estado: O HTTP é “sem estado”, ou seja, não há relação entre duas requisições sendo feitas através da mesma conexão. Como o fundamento básico do HTTP é não manter estados, utilizamos os Cookies HTTP para que as sessões tenham estados. Dessa forma, podemos adicionar os cookies aos cabeçalhos para permitir que a criação de sessão em cada requisição possam compartilhar o mesmo contexto/estado.
  • Conexões: As conexões são controladas pela camada de transporte, e portanto, estão fora do controle do HTTP, contudo, para cada par de requisição/resposta, uma conexão TCP é aberta. De fato, talvez caso haja a necessidade de haver várias requisições sendo feitas simultaneamente, não seja uma das característica mais agradáveis, e para contornar isso, foram criadas duas funcionalidades, uma no HTTP/1.1 e outra no HTTP/2.0. No HTTP/1.1 foi introduzida o conceito de “pipelining”, que dá uma maior controle para as conexões TCP utilizando o cabeçalho “Connection”. Já no HTTP/2.0, há a "multiplexação" de várias mensagens através de uma única conexão, ajudando a manter a conexão “mais quente”.

Fluxo HTTP

Quando um cliente quer se comunicar com um servidor, ele realiza os seguintes passos:

  • Abre uma conexão TCP: Uma conexão TCP será utilizada para enviar uma requisição e receber a resposta. Você pode criar uma conexão nova, reusar uma existente ou abrir várias conexões.
  • Envia uma  requisição HTTP: Essas mensagens são legíveis aos seres humanos (Vamos dar um exemplo melhor na sessão Requisição HTTP);
  • O servidor devolve uma Resposta HTTP (Também falaremos melhor na sessão Resposta HTTP);
  • A conexão é fechada. 

Requisição HTTP

Exemplo de uma requisição HTTP:

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: en
Enter fullscreen mode Exit fullscreen mode

Podemos dividir as requisições nos seguintes elementos:

  • Um método HTTP é um “verbo”, como por exemplo GET, POST, DELETE, PUT ou também um substantivo como OPTIONS ou HEAD que são utilizados para definir qual operação o cliente quer fazer. Cada método é utilizado para uma função diferente por convenção, por exemplo o método GET é utilizado para obtenção de recursos e o POST para publicação de dados.
  • O caminho do recurso a ser buscado (URL);
  • A versão do protocolo HTTP;
  • Cabeçalhos opcionais que possuem informações adicionais para os servidores;
  • E para alguns métodos como o POST, um corpo com os dados;

Resposta HTTP

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: “51142bc1-744-479b075b2891b”
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
Enter fullscreen mode Exit fullscreen mode

As resposta consistem em:

  • A versão do protocolo HTTP;
  • Um código de status (valos falar mais abaixo);
  • Uma mensagem de status, que basicamente é uma descrição do código de status;
  • Cabeçalhos HTTP, similar aos da requisição;
  • Opcionalmente, um corpo com dados do recurso requisitado;

Código de Status HTTP

Os códigos de status HTTP indicam se uma requisição HTTP foi corretamente concluída. Ao todo, as respostas são agrupadas em cinco classes:

  • 1XX - Respostas de informação;
  • 2XX - Respostas de sucesso;
  • 3XX - Redirecionamentos;
  • 4XX - Erros do Cliente;
  • 5XX - Erros do servidor.

Para cada grupo desses, existe um código específico para uma determinada situação. Você pode ter acesso a cada um deles clicando aqui.

Diferenças entre o HTTP e o HTTPS

Por se tratar de um protocolo na camada de aplicação, o HTTP não precisa necessariamente se preocupar em como a mensagem é transmitida. Essa responsabilidade é da camada de transporte (conexão criada utilizando o TCP). Como o HTTP é um protocolo baseado em texto, pessoas má intencionadas podem “sniffar” a conexão e acessar os dados que estão sendo transmitidos. Para tornar a conexão entre o Cliente e Servidor mais segura, utilizamos uma conexão TCP criptografada com TLS (Transport Layer Security), e é justamente por estar utilizando esse tipo de criptografia que temos o “S” de Secure no final do HTTPS. Essa funcionalidade é oferecida pelo Certificado SSL, que por sua vez é oferecido pela maioria dos servidores.

Sumarizando algumas diferenças:

  • HTTPS é uma extensão do HTTP. Para que ele possa transmitir os dados de maneira segura, ele utiliza um outro protocolo chamado TLS.
  • HTTP utiliza a porta TCP 80 por padrão, já o HTTP usa a porta TCP 443;
  • O HTTP funciona na camada de aplicação, o HTTPS funciona na camada de transporte (TCP + TLS);
  • Não há necessidade de um certificado SSL para o HTTP, mas para o HTTPS, precisamos de um certificado SSL assinado e implementado por um CA (Certification Authority);
  • No HTTP não há necessidade de validação de domínio, enquanto para o HTTPS é obrigatória a validação do domínio;

Referências

💖 💪 🙅 🚩
mdcg
Mauro de Carvalho

Posted on June 21, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Visão geral sobre o HTTP
http Visão geral sobre o HTTP

June 21, 2022