Hypertext Transfer Protocol, ou simplesmente, HTTP. Um dos protocolos mais fundamentais e amplamente utilizados na comunicação da web, sendo o principal meio de transmissão de dados entre clientes e servidores, permitindo a troca de informações na internet de maneira estruturada e eficiente.
Hm legal, masss afinal Ramiro, o que é o HTTP?
1. O que é o HTTP?
Vamos lá… ele é um protocolo de nível de aplicação que opera sobre o protocolo de transporte TCP/IP. Basicamente, ele define as regras para a formatação e a transmissão de mensagens, bem como as ações que os servidores e navegadores devem executar em resposta a diferentes comandos. Em outras palavras, especifica como as requisições (pedidos de dados) são enviadas de clientes para servidores e como as respostas são retornadas de servidores para clientes.
No fluxo do protocolo, os clientes, também conhecidos como user-agents (navegadores, entre outros), iniciam as conexões solicitando informações, e os servidores processam essas requisições e enviam respostas apropriadas. O cliente pode solicitar diferentes tipos de recursos, como documentos HTML, imagens, vídeos, arquivos de áudio ou dados JSON.
O HTTP, por natureza, é um protocolo síncrono. Isso significa que, em uma requisição HTTP tradicional, o cliente envia a requisição ao servidor e aguarda a resposta antes de continuar. Nesse modelo, o cliente não pode avançar enquanto a resposta do servidor não for recebida, e o ciclo de comunicação ocorre de forma sequencial:

- O cliente envia a requisição HTTP.
- O servidor processa a requisição
- O servidor envia a resposta de volta ao cliente.
- O cliente recebe e processa a resposta.
Embora existam técnicas, ferramentas e até mesmo a própria evolução do http em suas outras versões que apresentam melhorias e formas de lidar com esses essa comunicação síncrona. Mas isso é assunto para um outro momento.
Mesmo o HTTP sendo um dos protocolos mais visíveis na web, ele faz parte de um conjunto maior de protocolos que possibilitam a comunicação em redes. Ele funciona principalmente sobre o TCP/IP, o que significa que ele depende do TCP para estabelecer uma conexão confiável entre o cliente e o servidor e do IP para roteamento de pacotes pela rede. Em contraste, outros protocolos como o FTP (File Transfer Protocol) são usados para a transferência direta de arquivos, e o SMTP (Simple Mail Transfer Protocol) é usado para o envio de e-mails.
O HTTPS (HTTP Secure) é uma variação segura do HTTP, onde a comunicação entre cliente e servidor é criptografada usando SSL/TLS, garantindo a confidencialidade e a integridade dos dados transmitidos. Essa camada de segurança adicional é vital para transações sensíveis, como o envio de informações pessoais, dados bancários e credenciais de login, e hoje é amplamente adotada na web.
2. Caractersticas importantes do HTTP
Stateless: Ou seja, um protocolo sem estado, o que significa que cada requisição e resposta é independente. O servidor não mantém informações sobre requisições anteriores feitas pelo mesmo cliente. Para persistência de sessões, é necessário usar mecanismos como cookies ou tokens de autenticação.
Orientado a conexão: Embora seja sem estado, ele ainda depende do protocolo de transporte TCP, que é orientado a conexões. Isso significa que, antes de qualquer dado ser transmitido, o cliente e o servidor precisam estabelecer uma conexão, o que garante a entrega confiável dos dados.
Simplicidade e flexibilidade: Projetado para ser simples de implementar e flexível o suficiente para suportar uma variedade de aplicações além da navegação web, como APIs RESTful e aplicativos IoT.
Um ponto importante que vale ressaltar sobre essa característica stateless é que traz algumas limitações. Em aplicações web, muitas vezes é necessário rastrear o estado do cliente (por exemplo, para manter o login de um usuário ou lembrar o conteúdo de um carrinho de compras). Para lidar com isso, foram criados mecanismos adicionais, como:
- Cookies: Armazenam dados no navegador do cliente e enviam esses dados automaticamente em cada requisição subsequente para o mesmo domínio.
- Tokens de autenticação: Armazenados no cliente e usados para manter o estado da sessão de forma segura.
- Sessões no servidor: Alguns servidores mantêm estados temporários associados a um cliente específico, usando um identificador de sessão transmitido via cookies ou parâmetros de URL.
Embora o HTTP não tenha sido projetado para manter o estado, esses mecanismos complementares permitem a implementação de aplicações complexas e interativas.
3. Estrutura de uma Requisição HTTP Bruta
A requisição HTTP tem uma estrutura bem definida, composta por várias partes, que permitem que o cliente especifique qual recurso deseja acessar e como deseja interagir com ele. A estrutura de uma requisição HTTP é composta por três elementos principais:
3.1. Linha de Requisição (Request Line): é a primeira linha de uma requisição HTTP e contém as seguintes informações:
- Método HTTP: especifica a ação que o cliente deseja que o servidor execute. O método pode ser de leitura, gravação, modificação ou exclusão de recursos no servidor. Os métodos mais comuns são (Get, Post, Put, Patch, Delete, Head, Options)
- Caminho do recurso: especifica o endereço do recurso que o cliente está tentando acessar no servidor. Ele pode ser uma URL completa ou um caminho relativo ao servidor.
- Versão do Protocolo é a última parte da linha de requisição define a versão do protocolo (HTTP/1.1, HTTP/2, HTTP/3)

3.2 Cabeçalhos da Requisição (Request Headers): Fornecem informações adicionais sobre a requisição ou sobre o cliente que está fazendo a requisição. Eles consistem em pares de chave-valor e são enviados após a linha de requisição.
3.3 Corpo da Requisição (Request Body): é uma parte opcional da requisição, mas é frequentemente usada em métodos como POST, PUT e PATCH. Ele contém os dados que o cliente deseja enviar ao servidor, como informações de um formulário, dados de um arquivo ou dados JSON.
Exemplo de requisição:

4. Estrutura de uma Resposta HTTP Bruta
Assim como as requisições, as respostas também têm uma estrutura específica, composta por três elementos principais: a linha de status, os cabeçalhos e o corpo.
4.1 Linha de Status (Status Line): é a primeira linha de uma requisição HTTP e contém as seguintes informações:
- Versão do Protocolo: Informa a versão do HTTP utilizada.
- Código de Status: Um número que indica o resultado da requisição (por exemplo, 200 para sucesso, 404 para recurso não encontrado, 500 para erro interno no servidor).
- Mensagem de Status: Uma breve descrição textual do código de status.

4.2 Cabeçalhos da Resposta (Response Headers): Fornecem informações adicionais sobre a resposta do servidor. Eles seguem a linha de status e consistem em pares de chave-valor, cada um em uma linha separada. Esses cabeçalhos podem descrever o servidor, o tipo de conteúdo retornado, o cache, e outros metadados que o cliente pode usar.
4.3 Corpo da Resposta (Response Body): O corpo da resposta (response body) contém os dados retornados pelo servidor, como o conteúdo HTML de uma página, uma imagem, um arquivo de áudio ou vídeo, ou dados em formato JSON ou XML. O conteúdo do corpo da resposta é opcional e depende do tipo de requisição.
Exemplo de resposta:

5. Conclusão
Nesta parte do artigo tivemos a oportunidade de conhecer os fundamentos do protocolo. Abordamos seu fluxo de funcionamento e os conceitos básicos, além de apresentar a estrutura das requisições e respostas, vimos também exemplos de como são essas requisições.Na próxima parte, vamos abordar de forma mais detalhada os métodos HTTP mais comuns, como GET, POST, PUT, e DELETE, além de outros métodos menos conhecidos. Também analisaremos os principais cabeçalhos das requisições e respostas. Confira em Protocolo HTTP (Parte 2) - Métodos e cabeçalhos.