QUATRO PARTES
Leia a mensagem de cima para baixo: intenção, contexto, separação e conteúdo.
Em HTTP/1.1, a representação textual torna a anatomia visível. A requisição começa com método e alvo; a resposta começa com status. Depois vêm os campos, uma linha vazia e, quando permitido e necessário, o conteúdo.
Laboratório visual · Requisição e resposta lado a lado
Destaque uma parte e compare sua função nas duas mensagens.
Linha inicial: o pedido identifica método e alvo; a resposta informa versão e status.
O CLIENTE EXPRESSA UMA INTENÇÃO
Método + alvo identificam o que o cliente quer fazer e onde.
POST /pedidos?notificar=true HTTP/1.1
Host: api.exemplo.com
Content-Type: application/json; charset=utf-8
Accept: application/json
Authorization: Bearer •••
Content-Length: 36
{"produtoId":42,"quantidade":2}
POST: o método define a semântica geral — submeter conteúdo para processamento pelo recurso./pedidos?notificar=true: o alvo combina caminho e query. O caminho identifica o recurso; a query acrescenta parâmetros definidos pela aplicação.Host: identifica a autoridade desejada, permitindo vários sites no mesmo endereço.Content-Type: descreve a mídia do conteúdo enviado; neste caso, JSON em UTF-8.Accept: informa quais tipos de representação o cliente prefere receber.Authorization: carrega credenciais do esquema escolhido. HTTPS protege o header em trânsito; logs ainda precisam evitar expô-lo.
Host. Em HTTP/2 e HTTP/3, pseudo-headers codificam esses componentes.O SERVIDOR EXPRESSA UM RESULTADO
Status, campos e conteúdo contam histórias diferentes.
HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Location: /pedidos/981
Cache-Control: no-store
Content-Length: 26
{"id":981,"status":"novo"}
Resultado
A requisição criou um novo recurso. O status comunica a classe e o resultado principal sem obrigar a interpretar o body.
Referência
Indica o URI do recurso criado. Não é automaticamente uma ordem de redirecionamento neste status.
Representação
O conteúdo mostra dados úteis ao cliente. Outro cliente poderia negociar uma representação diferente do mesmo recurso.
CONTEÚDO NÃO É DELIMITADO POR “ATÉ FECHAR” SEMPRE
O receptor precisa saber quantos bytes pertencem à mensagem.
Em HTTP/1.1, regras de framing determinam o limite: Content-Length, codificação de transferência chunked em situações permitidas, semântica do método/status ou fechamento da conexão em casos específicos. Interpretar limites de forma divergente é também um problema de segurança.
| Situação | Há conteúdo? | Como pensar |
|---|---|---|
| GET bem-sucedido | Normalmente sim. | A representação pode ser HTML, JSON, imagem ou bytes de outro tipo. |
| HEAD | Não há conteúdo de resposta. | Os campos descrevem o que um GET correspondente teria, sem transferir a representação. |
| 204 No Content | Não. | O status declara ausência de conteúdo; não se deve anexar JSON vazio por hábito. |
| 304 Not Modified | Não. | O cliente reutiliza uma representação armazenada após revalidação. |
| POST com JSON | Pode ter. | Content-Type explica o formato; o método, sozinho, não define JSON. |
SEMÂNTICA ESTÁVEL, REPRESENTAÇÃO DIFERENTE
HTTP/2 e HTTP/3 não enviam estas linhas literalmente.
A forma textual é excelente para aprender a semântica e observar HTTP/1.1. Nas versões modernas, campos e conteúdo são codificados em frames e streams. O significado de método, alvo, status e headers continua existindo.
| Aspecto | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Representação no fio | Linhas e bytes de conteúdo. | Frames binários em streams. | Frames binários em streams QUIC. |
| Linha inicial | Visível como texto. | Pseudo-headers como :method, :path e :status. | Pseudo-headers equivalentes. |
| Campos | Nome e valor textuais. | Comprimidos com HPACK. | Comprimidos com QPACK. |
| Multiplexação | Não nativa na mesma conexão. | Vários streams sobre TCP. | Vários streams independentes sobre QUIC. |
DevTools, proxies e bibliotecas apresentam uma visão reconstruída e amigável da mensagem. Por isso você continuará vendo “Request Method”, “Status Code” e headers mesmo quando nenhum bloco textual idêntico atravessou a rede.
PARE E PENSE
Uma resposta informa Content-Type: application/json, mas envia HTML. O cliente deve confiar na extensão da URL ou no header?
Separe nome do recurso, metadado da representação e bytes realmente recebidos.
Content-Type declara o tipo da representação e deve corresponder aos bytes. A extensão da URL não define o tipo em HTTP. O cliente pode falhar ao interpretar, aplicar tratamento defensivo ou bloquear em certos contextos; a correção pertence ao servidor.CONTINUE EXPLORANDO
Referências e itens adicionais de estudo
Referências técnicas
Documentos normativos para semântica e codificação.
- RFC 9110 · HTTP Semantics — mensagens, conteúdo, métodos, status e campos.
- RFC 9112 · HTTP/1.1 — sintaxe textual e framing.
- RFC 9113 · HTTP/2 — frames, streams e HPACK.
- RFC 9114 · HTTP/3 — HTTP sobre QUIC e QPACK.
- IANA · HTTP Field Name Registry — registro oficial de campos.
Itens adicionais de estudo
Exercícios de leitura de mensagens.
- Execute
curl.exe -v https://example.come separe o que é diagnóstico do curl do que é HTTP. - Use
curl.exe -Ie explique por que HEAD pode mostrarContent-Lengthsem baixar o conteúdo. - No DevTools, compare document, stylesheet, image e fetch por método, tipo e initiator.
- Transforme a requisição desta aula em pseudo-headers HTTP/2.
- Pesquise Problem Details (RFC 9457) e modele um erro JSON interoperável.