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.

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.

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

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.

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
Pingback: REST - MAZER.DEV