DevGuideTK
← Trilha Backend

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}
ParteNo exemploPara que serve
MétodoPOSTDiz a intenção: ler, criar, substituir, apagar
Caminho/pedidosDiz sobre qual recurso é o pedido
CabeçalhosHost, Content-Type, AuthorizationMetadados: formato do corpo, credenciais, cache, idioma
Corpoo JSONOs 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étodoUsoSeguroIdempotente
GETLer um recursoSimSim
POSTCriar ou disparar uma açãoNãoNão
PUTSubstituir o recurso inteiroNãoSim
PATCHAlterar parte do recursoNãoDepende do formato
DELETERemoverNãoSim

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íliaSignificadoOs que mais aparecem
2xxDeu certo200 OK, 201 criado, 204 sem corpo
3xxVá a outro lugar301 mudou de vez, 302 temporário, 304 use o seu cache
4xxO pedido está errado400 malformado, 401 não identificado, 403 sem permissão, 404 não existe, 409 conflito, 422 dados inválidos, 429 pedidos demais
5xxO servidor falhou500 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:

  • 401 significa "não sei quem você é" (faltou ou venceu a credencial). 403 significa "sei quem você é, e você não pode".
  • 502 e 504 vê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çalhoDireçãoO que controla
Content-TypeAmbasFormato do corpo (application/json, text/html)
AcceptPedidoFormatos que o cliente aceita receber
AuthorizationPedidoCredencial de quem pede
Cookie e Set-CookiePedido e respostaEstado guardado no navegador, enviado de volta a cada pedido
Cache-ControlAmbasSe a resposta pode ser guardada, por quem e por quanto tempo
LocationRespostaPara 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:

  1. DNS: o nome api.loja.com.br é traduzido para um endereço IP.
  2. Conexão TCP: cliente e servidor trocam três mensagens para abrir um canal confiável.
  3. Negociação TLS (só no HTTPS): as duas pontas combinam as chaves de criptografia e o servidor prova quem é.
  4. Requisição: o texto do pedido é enviado pelo canal.
  5. 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 POST para tudo ou GET para ações, se o pedido não disser a intenção.
  • Ele devolve 200 com erro no corpo, ou 500 para 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.