HTTP, HTTPS e APIs
Como a comunicação na web funciona: o HTTP estrutura as requisições, o HTTPS as protege, e as APIs definem como os sistemas de software interagem.
Qual Problema o HTTP Resolve
O TCP nos dá uma conexão confiável, mas o HTTP define a linguagem estruturada que permite que clientes e servidores se entendam.
- Define como os clientes solicitam formalmente recursos específicos (arquivos, dados, APIs).
- Padroniza como metadados e conteúdo são empacotados e transmitidos.
- Estabelece um modelo claro de requisição–resposta entre cliente e servidor.
Detalhes
Depois que o TCP estabelece uma conexão confiável, as duas máquinas podem trocar bytes com segurança. No entanto, bytes brutos não têm significado inerente. Sem um protocolo compartilhado, o servidor não saberia se esses bytes representam uma solicitação de arquivo, envio de formulário ou algo totalmente diferente.
HTTP (Hypertext Transfer Protocol) define um formato estruturado para comunicação. Um cliente envia uma requisição (como GET /index.html), e o servidor retorna uma resposta contendo informações de status e dados.
HTTP padroniza como os recursos são solicitados, como os metadados são incluídos e como as respostas são formatadas. Isso torna a comunicação na web previsível e interoperável entre navegadores, servidores e plataformas.
Em resumo, o TCP garante a entrega. O HTTP garante o entendimento.
Anatomia de uma Requisição HTTP
Uma requisição HTTP é uma mensagem estruturada composta por um método, um caminho de destino, headers e um body opcional.
GET /users/123 HTTP/1.1 Host: api.example.com Authorization: Bearer xyz User-Agent: Browser
POST /users HTTP/1.1 Host: api.example.com Content-Type: application/json Authorization: Bearer xyz { "name": "Alice" }
- Método define a ação pretendida (GET, POST, PUT, DELETE).
- Caminho identifica o recurso específico que está sendo solicitado.
- Headers e Body carregam metadados e um payload de dados opcional.
Detalhes
Uma requisição HTTP começa com uma request line. Ela inclui o método e o caminho. Por exemplo:
GET /users/123 HTTP/1.1
Isso informa ao servidor qual ação está sendo solicitada e qual recurso é o alvo.
O método comunica a intenção.
GETrecupera dados.POSTenvia novos dados.PUTatualiza dados existentes.DELETEremove dados.
Os headers fornecem contexto adicional, como o tipo de conteúdo (Content-Type), credenciais de autenticação (Authorization) ou informações sobre o cliente (User-Agent).
Por fim, algumas requisições incluem um body. Por exemplo, uma requisição POST pode incluir dados JSON sendo enviados ao servidor.
Juntos, esses componentes criam uma estrutura previsível que os servidores podem analisar e interpretar corretamente.
Estrutura da Resposta HTTP
Uma resposta HTTP retorna um código de status, cabeçalhos e um corpo — informando ao cliente o que aconteceu e entregando os dados solicitados.
HTTP/1.1 200 OK Content-Type: application/json Content-Length: 27 Cache-Control: no-cache { "id": 123, "name": "Alice" }
HTTP/1.1 404 Not Found Content-Type: application/json Content-Length: 29 Cache-Control: no-cache { "error": "Usuário não encontrado" }
- Código de status indica o resultado (200, 404, 500).
- Cabeçalhos descrevem metadados sobre a resposta.
- Corpo contém o conteúdo real retornado ao cliente.
Detalhes
Uma resposta HTTP começa com uma linha de status, como:
HTTP/1.1 200 OK
O código de status comunica o resultado da solicitação.
200significa sucesso.404significa que o recurso não foi encontrado.500indica um erro no lado do servidor.
Em seguida vêm os cabeçalhos, que fornecem metadados sobre a resposta. Eles podem incluir Content-Type (por exemplo, JSON ou HTML), Content-Length, regras de cache ou políticas de segurança.
Por fim, o corpo contém os dados reais solicitados — como uma página HTML, um objeto JSON ou um arquivo.
A estrutura da resposta garante que o cliente entenda tanto o que aconteceu quanto quais dados foram retornados.
Por que HTTP é sem estado
HTTP trata cada requisição como independente — o servidor não lembra automaticamente das interações anteriores.
- Cada requisição é processada de forma isolada.
- Por padrão, o servidor não mantém memória das requisições anteriores.
- O estado deve ser gerenciado explicitamente (por exemplo, cookies, tokens, sessões).
Detalhes
HTTP é projetado como um protocolo sem estado. Isso significa que, quando um cliente envia uma requisição, o servidor a processa sem assumir qualquer contexto anterior.
Por exemplo, se você carregar uma página da web e depois clicar em um botão, a segunda requisição não inclui automaticamente a memória da primeira. Cada requisição deve conter todas as informações necessárias para o servidor processá-la.
A ausência de estado simplifica a escalabilidade. Como os servidores não dependem de estado de conexão armazenado, as requisições podem ser distribuídas entre várias máquinas atrás de um balanceador de carga.
Quando as aplicações precisam de continuidade — como sessões de login ou carrinhos de compras — elas implementam estado explicitamente usando cookies, identificadores de sessão ou tokens de autenticação.
O que o HTTPS adiciona
O HTTPS protege o HTTP ao adicionar TLS sobre o TCP, protegendo os dados em trânsito.
- O HTTPS criptografa todo o tráfego HTTP entre cliente e servidor.
- O HTTPS verifica a identidade do servidor usando certificados digitais.
- O HTTPS impede alterações indevidas por meio de verificações criptográficas de integridade.
Detalhes
HTTPS significa HTTP sobre TLS (Transport Layer Security). Em vez de enviar mensagens HTTP em texto simples, os dados são criptografados antes da transmissão.
Com HTTPS, tudo dentro da requisição e da resposta HTTP — incluindo headers e body — é criptografado. Isso impede que atacantes na rede leiam informações sensíveis, como senhas ou tokens.
O HTTPS também exige que o servidor apresente um certificado digital válido. O navegador verifica esse certificado com base em Autoridades Certificadoras confiáveis para confirmar a autenticidade do servidor.
Além disso, o TLS aplica verificações criptográficas de integridade para garantir que os dados não tenham sido modificados durante o trânsito.
Em resumo, o HTTPS protege a confidencialidade, a autenticidade e a integridade da comunicação na web.
O Handshake TLS
Antes que a comunicação criptografada comece, o TLS realiza um handshake para concordar sobre algoritmos, verificar a identidade e estabelecer chaves de criptografia compartilhadas.
Cliente
Servidor
Cliente: Aqui estão os métodos de criptografia que eu suporte.
- Client Hello propõe algoritmos de criptografia suportados e dados aleatórios.
- Server Hello + Certificate seleciona parâmetros e prova a identidade.
- Key Agreement estabelece um segredo compartilhado para criptografia.
Detalhes
Quando um cliente se conecta a um servidor HTTPS, o TLS primeiro realiza um handshake antes que qualquer dado HTTP seja enviado.
O processo começa com um Client Hello. O cliente propõe algoritmos criptográficos suportados (cipher suites) e envia dados aleatórios usados depois na geração de chaves.
O servidor responde com um Server Hello, selecionando os parâmetros de criptografia. Ele também envia seu certificado digital, que contém sua chave pública e é assinado por uma Certificate Authority confiável.
O cliente verifica o certificado e realiza um processo de key agreement (como Diffie-Hellman). Ambos os lados derivam independentemente o mesmo segredo compartilhado sem transmiti-lo diretamente.
Quando o handshake é concluído, chaves de criptografia simétrica são estabelecidas, e todo o tráfego HTTP subsequente é criptografado.
Certificados & Confiança
Certificados digitais permitem que os clientes verifiquem que estão se comunicando com o servidor legítimo, e não com um atacante.
- Uma Certificate Authority (CA) assina e valida identidades de servidores.
- Os certificados contêm a chave pública do servidor.
- Os navegadores verificam a propriedade do domínio antes de estabelecer confiança.
Detalhes
Um certificado digital é emitido por um terceiro confiável chamado Certificate Authority (CA). A CA verifica se a organização que solicita o certificado realmente controla o nome de domínio.
O certificado contém a chave pública do servidor, junto com informações de identificação sobre o domínio. Essa chave pública é usada durante o handshake do TLS para estabelecer comunicação criptografada.
Quando seu navegador se conecta a um site, ele verifica se o certificado foi assinado por uma CA em que ele já confia. Os navegadores vêm com uma lista integrada de Certificate Authorities confiáveis.
Se o certificado for válido, não estiver expirado e corresponder ao domínio solicitado, o navegador prossegue com a conexão segura. Caso contrário, ele exibe um aviso.
A confiança em HTTPS, portanto, é baseada em uma cadeia:
Você confia na CA → A CA confia no servidor → Você confia no servidor.
O que é uma API?
Uma API define o contrato estruturado que permite que sistemas de software se comuniquem de forma previsível.
- Define o conjunto de operações que um sistema expõe a clientes externos.
- Estabelece um contrato rígido para a estrutura da requisição, autenticação e formato da resposta.
- Cria uma fronteira estável que desacopla a implementação interna dos consumidores externos.
Detalhes
Uma API (Application Programming Interface) é uma especificação formal de como componentes de software interagem. Ela define quais operações estão disponíveis e como essas operações são acessadas.
Em sistemas web, as APIs normalmente usam HTTP. Os clientes enviam requisições para endpoints específicos (como /users/123) usando métodos definidos, como GET ou POST.
A API também define o formato da requisição esperado (por exemplo, JSON no corpo da requisição) e a estrutura do formato da resposta retornada pelo servidor.
Sem APIs, os sistemas dependeriam de convenções não documentadas ou de integrações fortemente acopladas. As APIs criam fronteiras claras, permitindo desenvolvimento independente, escalabilidade e interoperabilidade entre serviços.
APIs REST
REST é um estilo arquitetural que usa métodos HTTP e URLs baseadas em recursos para criar APIs web previsíveis e escaláveis.
GET /users/42
{
"id": 42,
"name": "Alex",
"role": "admin"
}- Organiza APIs em torno de recursos e suas representações, não de ações no estilo RPC.
- Usa a semântica padrão do HTTP para expressar a intenção (GET = leitura segura, POST = criar, etc.).
- Impõe interações sem estado para permitir escalabilidade horizontal.
Detalhes
REST (Representational State Transfer) organiza APIs em torno de recursos, não de ações. Um recurso é representado por uma URL como /users ou /orders/123.
Em vez de embutir verbos na URL, REST usa métodos HTTP para definir a operação:
GETrecupera dados.POSTcria novos dados.PUTatualiza dados existentes.DELETEremove dados.
APIs REST são sem estado, o que significa que cada requisição contém todas as informações necessárias. O servidor não depende de requisições anteriores para processar a atual.
A maioria das APIs REST troca dados no formato JSON, que é leve, legível por humanos e facilmente interpretado por máquinas.
Essa estrutura torna as APIs REST consistentes, escaláveis e fáceis de entender em sistemas distribuídos.
Cenários Comuns de Falha em HTTP/HTTPS/API
Nem todas as falhas da web acontecem na mesma camada — os erros podem surgir da lógica da aplicação, do transporte ou da segurança TLS.
- 404 → O roteamento na camada de aplicação não conseguiu encontrar o recurso.
- 500 → O servidor encontrou um erro interno de processamento.
- Conexão recusada ou erro de certificado SSL → Falha na camada de transporte ou TLS.
Detalhes
Um erro 404 Não encontrado significa que o servidor está acessível, mas a rota ou o recurso solicitado não existe. Isso normalmente é um problema de roteamento na camada de aplicação.
Um 500 Erro interno do servidor indica que a requisição chegou ao servidor, mas algo falhou durante a execução — como uma falha, uma exceção não tratada ou uma falha de banco de dados.
Um erro Conexão recusada ocorre mais cedo na pilha. O cliente não consegue estabelecer uma conexão TCP, geralmente porque o servidor está fora do ar ou nenhum processo está escutando na porta de destino.
Um erro de certificado SSL acontece durante o handshake TLS se o certificado for inválido, expirado ou não corresponder ao domínio. O navegador bloqueia a conexão para proteger o usuário.
Um aviso de conteúdo misto aparece quando uma página HTTPS tenta carregar recursos HTTP. Isso quebra as garantias de segurança do HTTPS e é sinalizado pelos navegadores modernos.
Entender onde uma falha ocorre — na aplicação, no transporte ou no TLS — é fundamental para depuração eficaz.
Seção de Perguntas
1 / 5