Módulo 05 — Consultas Avançadas
Implementando OPTIONS e HEAD
iniciante 30 min de leitura·Atualizado · .NET 9
Resumo
OPTIONSinforma quais métodos um recurso suporta (cabeçalhoAllow);HEADretorna os mesmos cabeçalhos de umGET, porém sem corpo. Ambos são seguros e idempotentes.
1. Objetivos de Aprendizagem#
- Implementar
OPTIONSretornando o cabeçalhoAllow. - Implementar
HEADreaproveitando a lógica doGET. - Entender o uso desses métodos por clientes e ferramentas.
2. Pré-requisitos#
- Verbos HTTP e safety/idempotência (Módulos 04 e 08).
3. Conceito#
OPTIONSresponde200 OKcomAllow: GET, POST, OPTIONS, comunicando as operações disponíveis. É usado, por exemplo, no preflight de CORS.HEADé comoGETsem corpo: o cliente obtém metadados (tamanho,ETag,Last-Modified) sem baixar a representação. O porquê: economia de banda em verificações.
4. Mão na Massa#
4.1. Setup#
Sem pacotes novos.
4.2. Implementação Passo a Passo#
OPTIONS:
C#
[HttpOptions]
public IActionResult GetOptions()
{
Response.Headers.Allow = "GET, OPTIONS, POST";
return Ok();
}
HEADcompartilhando a ação doGET:
C#
[HttpGet]
[HttpHead] // a mesma ação responde GET e HEAD; o framework descarta o corpo no HEAD
public async Task<IActionResult> Get()
{
var produtos = await _service.Produto.GetAllAsync(false);
return Ok(produtos);
}
4.3. Executando#
Shell
curl -i -X OPTIONS http://localhost:5000/api/produtos # header Allow
curl -I http://localhost:5000/api/produtos # HEAD: só cabeçalhos
5. Exemplo Completo#
Ao anotar a ação com [HttpGet] e [HttpHead], o ASP.NET Core executa a lógica e automaticamente omite o corpo na resposta ao HEAD, mantendo os cabeçalhos (incluindo Content-Length).
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
Preencher Allow com os métodos reais do recurso | Listar métodos que o recurso não implementa |
Reaproveitar a ação do GET para HEAD | Duplicar lógica só para remover o corpo |
| Manter ambos seguros e idempotentes | Efeitos colaterais em OPTIONS/HEAD |
Atenção
HEADnão deve ter corpo. Se você escrever manualmente noResponse.Body, o cliente pode receberContent-Lengthincorreto — deixe o framework cuidar disso.
7. Segurança e Produção#
OPTIONSé parte do preflight CORS; a política de CORS (Módulo 16) precisa permitir os métodos anunciados.
8. Exercícios#
- Fácil: adicione
OPTIONSa outro controller. - Médio: confirme que o
HEADretorna o mesmoContent-LengthdoGET. - Desafio: gere o cabeçalho
Allowdinamicamente a partir dos métodos mapeados na rota.
9. Resumo#
OPTIONS anuncia métodos suportados via Allow; HEAD reaproveita o GET sem corpo. Ambos são seguros, idempotentes e úteis a clientes e ao CORS.
10. Próximos Passos#
Módulo 36: o Root Document, ponto de entrada navegável da API.
11. Referências#
- MDN — OPTIONS
- MDN — HEAD
- Microsoft Learn — Roteamento e atributos de verbo HTTP
Terminou esta aula?
Marque como concluída para acompanhar seu progresso.