O mesmo valor opaco pode funcionar em uma validação de cache e falhar em uma pré-condição de escrita. O RFC 9110 define comparações diferentes para If-None-Match e If-Match.
| Validador atual | Cabeçalho enviado | Resultado da comparação |
|---|---|---|
| W/"v1" | If-None-Match: "v1" | Coincide pela comparação fraca |
| W/"v1" | If-Match: "v1" | Falha pela comparação forte |
| "v1" | If-Match: "v1" | Coincide pela comparação forte |
No primeiro caso, uma leitura GET pode receber 304 e reaproveitar a representação armazenada. No segundo, uma edição deve falhar na pré-condição, normalmente com 412. O terceiro permite que o servidor continue o processamento da edição, sujeito às demais verificações.
O que o teste precisa controlar
Crie uma rota de teste com uma representação conhecida. Leia o ETag, faça uma edição concorrente e tente gravar com o validador anterior. Depois repita com o validador atualizado. Se a API serve versões com codificações de conteúdo diferentes, revise como gera os validadores fortes para que a identidade da representação continue coerente.
Use a comparação prevista no RFC no servidor. Retirar manualmente o prefixo W/ de todo cabeçalho converte uma comparação forte em outra regra.
RFC 9110, ETag · Pré-condições HTTP
Leia também: JSON Patch com índices de array, test e If-Match