SEMÂNTICA · RESULTADO · CONTEXTO · ESTADO

Métodos, status, headers, cookies e sessões

Uma API compreensível usa o método para declarar intenção, o status para declarar resultado, os headers para transportar contexto e mecanismos explícitos para relacionar requisições que o HTTP trata separadamente.

Imagem: Edmondo / Wikimedia Commons, CC BY-SA 3.0

INTENÇÃO E RESULTADO

O endpoint é uma frase: método + recurso → status.

O caminho identifica o recurso; o método diz qual semântica a requisição pretende. O servidor executa a operação permitida e escolhe um status que comunique o resultado. O conteúdo pode detalhar, mas não deveria contradizer esse status.

Laboratório visual · Quatro histórias HTTP

Compare leitura, criação, substituição e recurso ausente.

método → status
Seu navegador não suporta canvas.

GET: obtém uma representação sem pedir alteração do recurso.

Idempotente não significa “a mesma resposta”. Significa que repetir a mesma intenção tem o mesmo efeito pretendido que executá-la uma vez. Um GET pode devolver horários diferentes; um DELETE repetido pode responder 204 e depois 404, sem recriar o recurso.

MÉTODOS MAIS ENCONTRADOS

Escolha pela semântica, não pela conveniência do framework.

MétodoIntençãoSeguro?Idempotente?Exemplo
GETObter a representação atual do recurso.SimSimGET /produtos/42
HEADObter os campos de um GET equivalente sem conteúdo.SimSimTestar metadados e cache.
POSTSubmeter conteúdo para processamento conforme o recurso.NãoNãoPOST /pedidos
PUTCriar ou substituir o estado do recurso no URI conhecido.NãoSimPUT /perfis/7
PATCHAplicar modificações parciais descritas pelo conteúdo.NãoNão por definiçãoPATCH /perfis/7
DELETERemover a associação do recurso com seu URI.NãoSimDELETE /itens/9
OPTIONSDescobrir opções de comunicação para o alvo.SimSimTambém participa do preflight CORS.

Seguro significa que o cliente não pediu alteração de estado; métricas e logs podem acontecer como efeito colateral. Idempotente orienta retries e intermediários, mas não elimina a necessidade de controlar concorrência e efeitos externos.

STATUS CODES

A classe dá a direção; o código específico explica o desfecho.

1xxinformação provisória; a troca continua
2xxrequisição processada com sucesso
3xxredirecionamento ou uso de outra representação
4xxo pedido não pode ser atendido como enviado
5xxo servidor falhou ao cumprir um pedido aparentemente válido
CódigoUse quandoNão confunda
200 OKOperação concluída e há uma representação útil.Não usar 200 com {"erro":true} para toda falha.
201 CreatedUm ou mais recursos foram criados.Use Location quando puder apontar o principal recurso.
204 No ContentSucesso sem conteúdo de resposta.Não enviar JSON ou espaço no body.
304 Not ModifiedA representação armazenada continua válida após requisição condicional.Não é “redirecionar para outra URL”.
400 Bad RequestO servidor não consegue processar o pedido por problema do cliente.Forneça detalhes seguros e acionáveis.
401 UnauthorizedFaltam credenciais válidas para o recurso.Na prática significa “não autenticado”; pode usar WWW-Authenticate.
403 ForbiddenO servidor entendeu, mas recusa autorizar.Não revelar informação sensível na justificativa.
404 Not FoundNão há representação atual ou o servidor não quer revelar sua existência.Não implica erro de sintaxe da URL.
409 ConflictO pedido conflita com o estado atual do recurso.Útil para conflito de versão ou unicidade conhecido.
429 Too Many RequestsO cliente excedeu uma política de taxa.Pode orientar espera com Retry-After.
500 / 503Falha inesperada / indisponibilidade temporária.503 pode usar Retry-After; retry precisa de limite e jitter.

HEADERS SÃO CAMPOS DE CONTEXTO

Alguns descrevem a representação; outros controlam a troca.

Representação

Content-Type, Content-Length, Content-Encoding e Content-Language descrevem os bytes transferidos.

Negociação

Accept, Accept-Encoding e Accept-Language expressam preferências do cliente.

Cache

Cache-Control, ETag, Last-Modified, If-None-Match e Vary coordenam reuso.

Autenticação

Authorization, WWW-Authenticate, Cookie e Set-Cookie participam de credenciais e estado.

Navegação

Location, Referer e políticas de redirecionamento ajudam a entender o caminho da interação.

Políticas

CSP, HSTS, CORS e outros campos influenciam como navegadores permitem conteúdo, canal e acesso entre origens.

Nomes de campos não diferenciam maiúsculas e minúsculas. Valores podem ter gramáticas próprias. Não divida tudo por vírgula sem consultar a especificação — Set-Cookie, por exemplo, não deve ser combinado como uma lista comum.

ADICIONANDO CONTEXTO ENTRE REQUISIÇÕES

Cookie fica no agente do usuário; sessão costuma guardar estado no servidor.

O servidor envia Set-Cookie. O navegador armazena nome, valor e atributos e, em requisições futuras, calcula quais cookies são aplicáveis. Uma sessão tradicional guarda apenas um identificador opaco no cookie e associa esse ID a dados mantidos no servidor.

Laboratório visual · Ciclo de uma sessão

Avance do login até a invalidação.

estado controlado
Seu navegador não suporta canvas.

Antes do login: o navegador ainda não possui um identificador de sessão aplicável ao site.

Resposta de loginidentificador opaco
Set-Cookie: __Host-sid=a8f2…; Path=/; Secure; HttpOnly; SameSite=Lax
ElementoFunçãoLimite importante
SecureRestringe o envio a conexões seguras.Não torna o valor criptografado dentro do navegador.
HttpOnlyImpede acesso pelo document.cookie.Ajuda contra roubo via XSS, mas não impede requisições feitas pelo script malicioso.
SameSiteRestringe envio em contextos cross-site segundo a política.É defesa importante contra CSRF, não substitui todas as medidas.
Path e DomainDefinem escopo de envio.Path não é barreira de confidencialidade entre páginas da mesma origem.
Max-Age / ExpiresControlam persistência do cookie.A sessão no servidor também deve expirar e poder ser revogada.

PARE E PENSE

Se HttpOnly impede JavaScript de ler o cookie de sessão, então XSS deixou de ser perigoso?

Não. HttpOnly reduz o roubo direto do valor, mas um script executado na origem pode enviar requisições que levam o cookie automaticamente, ler conteúdo acessível, alterar a interface e capturar dados digitados. Previna XSS com saída codificada, APIs seguras, CSP, validação contextual e redução de código de terceiros.

CONTINUE EXPLORANDO

Referências e itens adicionais de estudo

Referências técnicas

Registros e padrões atuais.

Itens adicionais de estudo

Prática guiada.

  • Modele CRUD sem assumir uma correspondência mecânica: justifique método, recurso e status de cada operação.
  • No DevTools, localize Set-Cookie, o cookie armazenado e seu envio posterior.
  • Compare uma resposta 200 baixada, 304 revalidada e servida diretamente do cache.
  • Estude CSRF e XSS e relacione cada defesa ao ataque correto.
  • Projete logout em todos os dispositivos e rotação de ID após autenticação.