Primeiramente pode-se afirmar que o protocolo de rede HTTP é a estrada que sustenta toda a comunicação e funcionamento de sistemas web e a comunicação de APIs REST ou SOAP entre aplicações móveis e servidores de backend.

Em outras palavras:

O que é HTTP

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).

O que é o protocolo HTTPS

HTTPS é a versão segura do protocolo para trafegar informações. O acrônimo HTTPS significa 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 (MDN Web Docs 2019)
Transferência de documento sobre o Protocolo HTTP (MDN Web Docs 2019)

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 HTTP

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

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 HTTP

Também chamado de verbo de requisição, define a ação que o cliente está solicitando para execução no servidor.

Cabe ao serviço que irá atender à requisição, tratar a maneira como processar e responder de acordo com o método HTTP informado no cabeçalho. Você pode entender melhor como utilizar no artigo APIs REST e RESTFul.

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, todos os campos de um registro de banco de dados - excepto pelo seu id.

  • 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 HTTP

Cabeçalho de Requisição HTTP
Cabeçalho de Requisição HTTP

Cabeçalhos HTTP 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

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.

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

Em síntese, podemos afirmar que para o desenvolvedor de aplicações Web ou aplicativos móveis, é essencial conhecer e dominar os conceitos do Protocolo HTTP.

Por meio do estudo deste protocolo é possível explorar com qualidade todas as suas características e, portanto, construir softwares robustos e seguros, o que, acima de tudo, resulta em produtos de sistema 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/http-desenvolvedores-frontend/

Wikipedia 2019 – Lista de Status HTTP