1001Ferramentas
🤝Dev

Content-Negotiation Match

Casa Accept do cliente com tipos oferecidos pelo servidor (escolhe o melhor q).

Match

Qual formato o servidor vai escolher

Negociação de conteúdo é o mecanismo pelo qual cliente e servidor combinam o formato da resposta. O cliente manda no Accept o que aceita, com preferência; o servidor tem uma lista do que sabe produzir; e alguém precisa cruzar as duas. Quando o resultado não é o esperado, a resposta vem em formato errado ou com um 406, e a causa quase nunca está óbvia no log.

Informe o cabeçalho Accept que chega e a lista de formatos que a sua aplicação oferece, e a página mostra qual venceria e com que fator de qualidade. O critério é o q mais alto entre os tipos que existem dos dois lados, com o coringa geral entrando quando o cliente declara aceitar qualquer coisa. Quando nada casa, o resultado é explícito, que é o cenário do 406.

Vale saber o limite desta comparação: ela trata tipo exato e o coringa completo, mas não o coringa de subtipo, do tipo texto seguido de asterisco. A especificação manda dar precedência ao mais específico — tipo exato ganha do coringa de subtipo, que ganha do coringa geral —, e servidores reais implementam essa escada. Para conferir o comportamento do seu, teste com curl mandando cabeçalhos diferentes.

Perguntas frequentes

Devo responder 406 quando nada casa?
A especificação permite, mas a prática mais comum é servir o formato padrão da aplicação mesmo assim, porque um 406 costuma confundir mais do que ajudar — muitos clientes mandam Accept mal formado sem querer restringir nada. Se optar pelo 406, inclua no corpo a lista do que você oferece.
O navegador manda um Accept restritivo?
Ao navegar, ele manda uma lista longa começando por HTML e XHTML e terminando em coringa com q baixo — ou seja, aceita qualquer coisa, preferindo HTML. Chamada de JavaScript com fetch, por outro lado, manda coringa puro se você não definir o cabeçalho, o que deixa a escolha inteiramente com o servidor.
Como forço um formato específico?
Mandando o Accept com apenas aquele tipo. Muitas APIs também aceitam extensão na URL ou um parâmetro de consulta como alternativa, o que é mais fácil de testar no navegador — mas o mecanismo padrão, e o que funciona sem acordo prévio, é o cabeçalho.

Ferramentas Relacionadas