Protocolo HTTP

Protocolo HTTP

Primeiramente pode-se afirmar que o protocolo HTTP é a estrada que sustenta toda a comunicação e funcionamento de sistemas web. Em outras palavras: praticamente toda informação na Internet trafega usando este protocolo.

Conceito

HTTP é a sigla para HyperText Transfer Protocol que em português significa “Protocolo de Transferência de Hipertexto”.

É um protocolo de comunicação entre sistemas de informação que permite a transferência de dados entre redes de computadores, sendo o protocolo base para o desenvolvimento de sistemas para web.

É utilizado para transferência de páginas HTML do computador para a Internet. Por isso, os endereços dos websites (URL) utilizam no início a expressão “http://”, definindo o protocolo usado. Esta informação é necessária para estabelecer a comunicação entre a URL e o servidor Web que armazena os dados, enviando então a página HTML solicitada pelo usuário. Para que a transferência de dados na Internet seja realizada, o protocolo HTTP necessita estar agregado a outros dois protocolos de rede: TCP (Transmission Control Protocol) e IP (Internet Protocol).

HTTPS

A versão segura para trafegar informações, usando este protocolo, chama-se HTTPS, sigla para Hyper Text Transfer Protocol Secure, que em português significa Protocolo de Transferência de Hipertexto Seguro. Faz a encriptação dos dados fornecidos, exigindo autenticação, aplicando ainda outras ferramentas que garantem a segurança dos dados enviados e recebidos pelas aplicações cliente e servidor.

É obtido com a combinação dos protocolos HTTP e SSL (Secure Sockets Layers – Camadas de Sockets Seguros). Os sites assegurados por este protocolo, iniciam com “https://” antes do endereço URL.

Como funciona o Protocolo HTTP

O Protocolo HTTP funciona como um protocolo de requisição <-> resposta no modelo cliente-servidor. O cliente mais comum, um navegador web, por exemplo, se comunica por meio de mensagens, chamadas requisições HTTP, a uma aplicação em um computador que hospeda um programa web, ou um site, que recebe a requisição, processa e retorna com a resposta HTTP. A resposta contém informações de estado completas sobre a requisição e pode também conter o conteúdo solicitado no corpo de sua mensagem.

Segue um modelo cliente-servidor clássico, onde um cliente abre uma conexão, executa uma requisição e espera até receber uma resposta. É um protocolo que não mantém o estado de conexão, ou stateless protocol. Isto significa que o servidor não mantém aberta a conexão com o cliente, ou nenhum dado entre duas requisições (state – estado).

Como já mencionado, é a base para as trocas de dados na Web, sendo que o mais comum é o transporte de documentos HTML completos, que são reconstruídos a partir de diferentes subdocumentos obtidos, como por exemplo texto, descrição do layout, imagens, vídeos, scripts e muito mais.

Transferência de documento sobre o Protocolo HTTP
Transferência de documento sobre o Protocolo HTTP (MDN Web Docs 2019)

Características do protocolo HTTP

  • Simplicidade: foi projetado para ser simples e legível às pessoas. As mensagens HTTP podem ser lidas e entendidas por ser humano, tornando fácil seu uso para desenvolvimento e testes;
  • Extensibilidade: com o uso de cabeçalhos é possível introduzir variáveis de cabeçalho personalizadas, pelo simples acordo entre um cliente e um servidor sobre a nova semântica. Por exemplo: informando uma chave de acesso secreta a determinado recurso;
  • Sessões: HTTP não tem estado, isso traz um problema imediato para usuários que interagem com algumas páginas como usando um carrinho de compras onde o servidor precisa identificar o cliente entre suas diversas requisições. Desta forma a utilização de cookies permite que as sessões tenham estados. Usando a extensibilidade dos cabeçalhos, cookies são adicionados ao fluxo do HTTP (o cliente insere a mesma identificação de cookie em cada requisição), com a finalidade de criação de sessão e sua recuperação em cada requisição HTTP ao servidor, compartilhando assim o mesmo contexto, ou o mesmo estado.

Requisição / Resposta

O fluxo de comunicação é realizado a partir do cliente, que envia uma requisição ao servidor, usando uma requisição HTTP. Logo depois, o servidor interpreta, processa e posteriormente devolve a requisição com uma “resposta HTTP”. Em ambos os tráfegos “mensagens HTTP” são colocadas no fluxo.

Fluxo de requisição / resposta sobre o Protocolo HTTP
Fluxo de requisição / resposta sobre o Protocolo HTTP (MAZER.DEV)

As requisições consistem dos seguintes elementos:

  • O método, definido por um verbo: GET, POST, DELETE, PUT, o qual define qual operação o cliente quer fazer;
  • O caminho do recurso, a URL;
  • A versão do protocolo HTTP;
  • Variáveis de Cabeçalho, opcionais, que contém informações adicionais para os servidores;
  • Um corpo de dados, e alguns casos, como para método POST, que contém o informações para recurso requisitado.

Métodos de requisição

Igualmente chamado de verbo de requisição, define a ação que o cliente está solicitando para execução no servidor. A seguir os métodos mais utilizados são:

  • GET
    Solicita a leitura de informações de um recurso no servidor. Por exemplo: uma página estática HTML, um arquivo de imagem, um registro de um sistema.
  • POST
    Enviar informações para o servidor, que as interpretará de acordo com o recurso recebido, em geral, persistindo estes dados em um banco de dados. Por exemplo: dados de um formulário de cadastro, dados de um formulário de login.
  • PUT
    Similar ao POST, poŕem os dados enviados são informações que substituirão um recurso existente. Portanto, ao enviar os dados, o servidor encontrará o recurso e irá alterar, por exemplo, apenas alguns campos de um registro de banco de dados.
  • PATCH
    Similar ao PUT, porém envia informações para alterar partes de um recurso. Por exemplo, ao enviar somente dados para a alteração de senha e não de todo o cadastro de usuário.
  • DELETE
    Solicita a exclusão de um recurso específico do servidor. Por exemplo: excluir um item de um carrinho de compras.

Cabeçalhos

Cabeçalho de Requisição HTTP
Cabeçalho de Requisição HTTP (Web Dev Drops 2019)

Respostas consistem dos seguintes elementos:

  • A versão do protocolo HTTP;
  • Status de resposta, um código indicando se a requisição foi bem sucedida, erro ou ação a ser seguida pelo cliente como redirecionamento de requisição;
  • Uma mensagem de status, descrição informal sobre o código de status;
  • variáveis de cabeçalho;
  • Opcionalmente, um corpo com dados do recurso requisitado, em geral, um documento HTML completo.
Cabeçalho HTTP Resposta
Cabeçalho HTTP Resposta (Web Dev Drops 2019)

Status de Resposta

Os status de retorno indicam se a requisição foi atendida com sucesso e são agrupados em cinco classes, identificadas pelo primeiro dígito. Ou seja, o cliente pode utilizar o status de resposta para realizar ações ou apresentar mensagens melhor contextualizadas para o usuário. Dessa forma padronizando o tratamento das respostas recebidas às suas requisições.

Os códigos de status são divididos em grupos como apresentados a seguir:

  • 1xx — Informação
  • 2xx — Sucesso
  • 3xx — Redirecionamento
  • 4xx — Erro do cliente
  • 5xx — Erro do servidor

Alguns códigos em cada grupo são usados com mais frequência, consequentemente, mais conhecidos que os demais, por exemplo:

  • 200 OK: A requisição foi atendida com sucesso.
  • 301 Moved Permanently: O recurso mudou permanentemente para uma nova URI. A nova URI deve ser retornada na resposta.
  • 302 Found: O recurso mudou temporariamente de URI.
  • 400 Bad Request: A requisição está mal formada e não pode ser entendida pelo servidor.
  • 403 Forbidden: Usuário não autorizado a fazer a operação requisitada.
  • 404 Not Found: O recurso requisitado não pode ser encontrado na URI informada.
  • 405 Method Not Allowed: O método utilizado na requisição não é permitido no recurso especificado.
  • 500 Internal Server Error: O servidor encontrou uma condição inesperada que o impede de executar a requisição.
  • 503 Service Unavailable: O servidor está temporariamente indisponível, normalmente devido a sobrecarga ou manutenção.

Veja a lista completa em (Wikipedia 2019 – Lista de status HTTP).

Em síntese, podemos afirmar que para o desenvolvedor Web, ou para dispositivos móveis, a necessidade em conhecer e dominar os conceitos do Protocolo HTTP são essenciais a fim de explorar com qualidade todas as suas características e, portanto, construir softwares robustos e seguros, o que, acima de tudo, resulta em produtos de alta qualidade.

Referências

MDN Web Docs 2019 – HTTP – https://developer.mozilla.org/pt-BR/docs/Web/HTTP

Web Dev Drops 2019 – https://www.webdevdrops.com/b%C3%A1sico-de-http-para-desenvolvedores-frontend-954fa3688c87/

Wikipedia 2019 – Lista de Status HTTP – https://pt.wikipedia.org/wiki/Lista_de_c%C3%B3digos_de_estado_HTTP

Este post tem um comentário

Deixe uma resposta

Ademir Mazer Junior

Engenheiro de Software. desenvolvedor com aproximadamente 30 anos de experiência. Professor universitário. Especialista em Arquitetura de Software, PHP, Laravel, Processos de Desenvolvimento de Software.