HTTP e HTTPS
O protocolo de pedido e resposta que sustenta a web e quase toda API. Entenda o que trafega em cada requisição e o que o HTTPS acrescenta.
O que é
HTTP é um acordo sobre como dois programas conversam: um cliente envia um pedido em texto e um servidor devolve uma resposta. O navegador abrindo uma página, o aplicativo do celular buscando o saldo e um serviço chamando outro dentro do mesmo data center usam a mesma conversa.
O protocolo não guarda memória entre um pedido e o seguinte. Cada requisição precisa carregar tudo o que o servidor precisa para atendê-la, inclusive quem está pedindo. Essa característica se chama stateless, e é ela que permite colocar dez servidores idênticos atrás de um balanceador: qualquer um deles consegue responder a qualquer pedido.
Anatomia de uma requisição
Um pedido HTTP tem quatro partes:
POST /pedidos HTTP/1.1
Host: api.loja.com.br
Content-Type: application/json
Authorization: Bearer eyJhbGciOi...
{"produto": 42, "quantidade": 2}| Parte | No exemplo | Para que serve |
|---|---|---|
| Método | POST | Diz a intenção: ler, criar, substituir, apagar |
| Caminho | /pedidos | Diz sobre qual recurso é o pedido |
| Cabeçalhos | Host, Content-Type, Authorization | Metadados: formato do corpo, credenciais, cache, idioma |
| Corpo | o JSON | Os dados enviados; não existe em pedidos como GET |
A resposta segue o mesmo desenho, trocando a primeira linha por um código de status:
HTTP/1.1 201 Created
Content-Type: application/json
Location: /pedidos/981
{"id": 981, "status": "aguardando_pagamento"}Métodos: a intenção do pedido
O método informa o que o cliente quer fazer, e também faz duas promessas que a infraestrutura leva a sério:
- Seguro: o pedido não altera nada no servidor.
- Idempotente: repetir o mesmo pedido deixa o servidor no mesmo estado que fazê-lo uma vez.
| Método | Uso | Seguro | Idempotente |
|---|---|---|---|
GET | Ler um recurso | Sim | Sim |
POST | Criar ou disparar uma ação | Não | Não |
PUT | Substituir o recurso inteiro | Não | Sim |
PATCH | Alterar parte do recurso | Não | Depende do formato |
DELETE | Remover | Não | Sim |
Essas promessas têm consequência prática. Um proxy, uma biblioteca de cliente ou o próprio navegador pode repetir sozinho um GET que falhou, porque repetir é inofensivo. Se o seu GET /pedidos/981/cancelar cancela o pedido, um robô de busca ou um pré-carregamento do navegador cancela pedidos por você.
Códigos de status: o resultado em três dígitos
O primeiro dígito define a família, e é ele que clientes, proxies e ferramentas de monitoramento olham primeiro.
| Família | Significado | Os que mais aparecem |
|---|---|---|
2xx | Deu certo | 200 OK, 201 criado, 204 sem corpo |
3xx | Vá a outro lugar | 301 mudou de vez, 302 temporário, 304 use o seu cache |
4xx | O pedido está errado | 400 malformado, 401 não identificado, 403 sem permissão, 404 não existe, 409 conflito, 422 dados inválidos, 429 pedidos demais |
5xx | O servidor falhou | 500 erro interno, 502 o serviço de trás respondeu errado, 503 indisponível, 504 o serviço de trás não respondeu a tempo |
A distinção entre 4xx e 5xx decide quem deve agir. Um 4xx diz ao cliente que repetir o mesmo pedido não adianta. Um 5xx diz que o problema é do servidor e que tentar mais tarde pode funcionar. Uma API que devolve 200 com {"erro": "..."} no corpo esconde a falha de todo o caminho: o balanceador acha que está saudável, o monitoramento não alerta e o cliente precisa abrir o corpo para descobrir.
Dois pares confundem bastante:
401significa "não sei quem você é" (faltou ou venceu a credencial).403significa "sei quem você é, e você não pode".502e504vêm de um intermediário (proxy, balanceador) reclamando do serviço que está atrás dele. Quando aparecem, o problema quase nunca está no intermediário.
Cabeçalhos: onde mora o comportamento
O corpo carrega os dados; os cabeçalhos dizem como tratá-los. Os que você vai encontrar todo dia:
| Cabeçalho | Direção | O que controla |
|---|---|---|
Content-Type | Ambas | Formato do corpo (application/json, text/html) |
Accept | Pedido | Formatos que o cliente aceita receber |
Authorization | Pedido | Credencial de quem pede |
Cookie e Set-Cookie | Pedido e resposta | Estado guardado no navegador, enviado de volta a cada pedido |
Cache-Control | Ambas | Se a resposta pode ser guardada, por quem e por quanto tempo |
Location | Resposta | Para onde ir num redirecionamento ou onde ficou o recurso criado |
Como o protocolo não tem memória, é o par Cookie ou Authorization que reconstrói a identidade do usuário a cada pedido. Toda forma de login na web é uma variação disso.
O caminho de um pedido
Entre digitar um endereço e receber a resposta acontecem cinco etapas:
- DNS: o nome
api.loja.com.bré traduzido para um endereço IP. - Conexão TCP: cliente e servidor trocam três mensagens para abrir um canal confiável.
- Negociação TLS (só no HTTPS): as duas pontas combinam as chaves de criptografia e o servidor prova quem é.
- Requisição: o texto do pedido é enviado pelo canal.
- Resposta: o servidor processa e devolve.
As três primeiras etapas custam tempo antes de qualquer dado útil trafegar. Por isso as conexões são reaproveitadas (keep-alive): depois da primeira resposta, o canal fica aberto para os próximos pedidos. Um serviço que abre uma conexão nova a cada chamada paga esse custo todas as vezes, e esse é um dos motivos mais comuns de lentidão entre serviços.
O que o HTTPS acrescenta
HTTPS é o mesmo HTTP trafegando dentro de um túnel TLS. O conteúdo da conversa não muda; o que muda são três garantias:
- Sigilo: quem está no meio do caminho (o Wi-Fi do café, o provedor) vê apenas com qual servidor você fala, e não o caminho, os cabeçalhos ou o corpo.
- Integridade: ninguém altera o conteúdo em trânsito sem que a conexão quebre.
- Autenticidade: o servidor apresenta um certificado, assinado por uma autoridade em que o seu sistema confia, provando que ele responde mesmo por aquele domínio.
Por que isso importa quando a IA escreve o código
Um assistente gera um endpoint funcional em segundos. O que ele não sabe é o contexto do seu sistema, e é nas decisões de protocolo que isso aparece:
- Ele escolhe
POSTpara tudo ouGETpara ações, se o pedido não disser a intenção. - Ele devolve
200com erro no corpo, ou500para um dado inválido do usuário. - Ele escreve o cliente sem tempo limite, e um serviço lento trava o seu.
- Ele não sabe se uma operação pode ser repetida com segurança.
Quem entende o protocolo lê o código gerado e identifica esses pontos em um minuto. O nível seguinte compara as versões do HTTP e as formas de colocar HTTPS no ar.
Prompts para aprofundar
Ao abrir no ChatGPT ou no Claude, o prompt é enviado ao serviço escolhido pela URL e também fica copiado na sua área de transferência.
HTTP em cinco minutos
Explique o que é o HTTP em no máximo cinco minutos de leitura, para alguém que programa mas nunca estudou redes. Cubra só o essencial: o que é um pedido e uma resposta, o que significam o método e o código de status, por que o protocolo não guarda memória entre pedidos e o que o HTTPS acrescenta. Use um exemplo do dia a dia, como um aplicativo buscando os pedidos de um cliente. No final, me faça três perguntas curtas para eu verificar se entendi, e corrija as minhas respostas.
Explicação guiada, do zero
Quero entender de verdade como o HTTP funciona, e não decorar definições. Aja como um mentor de backend experiente. Explique o ciclo completo de uma requisição HTTP, desde o momento em que o cliente decide fazer o pedido até a resposta chegar: resolução de DNS, conexão TCP, negociação TLS quando for HTTPS, envio do pedido e retorno da resposta. Regras para a nossa conversa: 1. Antes de começar, pergunte qual é a minha experiência com desenvolvimento e em qual linguagem eu trabalho, e adapte os exemplos a isso. 2. Explique uma etapa por vez. Ao fim de cada etapa, faça uma pergunta curta para verificar se eu entendi, e só avance depois da minha resposta. 3. Use uma requisição real como fio condutor (por exemplo, um aplicativo buscando os pedidos de um cliente) e mostre o texto exato do pedido e da resposta. 4. Quando eu errar, não dê a resposta direto: aponte onde está a falha no meu raciocínio. Ao final, peça que eu explique com minhas palavras por que o HTTP é chamado de stateless e o que isso muda na hora de escalar um sistema.
Métodos, idempotência e códigos de status
Quero treinar a escolha correta de métodos HTTP e códigos de status. Primeiro, explique em poucas linhas o que significa um método ser seguro e o que significa ser idempotente, e por que proxies, navegadores e bibliotecas de cliente dependem dessas duas propriedades. Depois, me apresente 8 situações reais de uma API de comércio eletrônico, uma de cada vez (exemplos: cancelar um pedido, aplicar um cupom, consultar o frete, tentar pagar com cartão recusado, acessar o pedido de outro usuário). Para cada uma, pergunte qual método e qual código de status eu usaria, espere a minha resposta e então comente: o que está certo, o que está errado e qual seria a consequência prática da escolha errada em produção. Inclua pelo menos duas situações em que a resposta intuitiva está errada, e pelo menos uma que envolva a diferença entre 401 e 403 e outra entre 400, 409 e 422.
O que o HTTPS garante e o que não garante
Explique o que acontece na negociação TLS de uma conexão HTTPS, em linguagem acessível para quem programa mas nunca estudou criptografia. Cubra, nesta ordem: 1. Quais são as três garantias do HTTPS (sigilo, integridade e autenticidade) e contra qual ataque concreto cada uma protege. 2. O papel do certificado e da autoridade certificadora, e o que o navegador confere antes de confiar no servidor. 3. O que alguém na mesma rede Wi-Fi consegue ver de uma conexão HTTPS e o que não consegue. 4. O que o HTTPS não protege: liste pelo menos quatro problemas de segurança que continuam existindo com o cadeado no navegador. Depois da explicação, faça três perguntas de cenário para eu responder (por exemplo: "o certificado do servidor venceu ontem, o que o usuário vê e por quê?") e corrija as minhas respostas.