If-None-Match

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

O cabeçalho de requisição HTTP If-None-Match faz uma requisição condicional. Para os métodos GET e HEAD, o servidor irá mandar de volta o recurso requisitado, com um código de status 200, somente se ele não tiver um ETag correspondendo as tags dadas pela requisição. Para outros métodos, a requisição será processada somente o recurso existente eventualmente não possuir nenhuma ETag correspondente nos valores listados.

Quando a condição falha para métodos GET e HEAD, então o servidor deve retornar um código de status HTTP 304 (Not Modified). Para outros métodos que aplicam mudanças no lado do servidor, o código de status 412 (Precondition Failed) é utilizado. Note que o servidor gerando uma resposta 304 DEVE gerar qualquer um dos seguintes cabeçalhos que seriam enviados em uma resposta 200 (OK) para a mesma requisição: Cache-Control, Content-Location, Date, ETag, Expires, and Vary.

A comparação com a ETag guardada usa o algoritmo de comparação fraco, significa que dois arquivos são considerados idênticos se o conteúdo é equivalente — eles não precisam ser idênticos byte por byte. Por exemplo, duas páginas que diferem pela data de sua geração no rodapé ainda assim serão consideradas como idênticas.

Quando usado em combinação com If-Modified-Since, If-None-Match tem precedência (se o servidor suporta isso).

Existem dois casos de uso comuns:

  • Para métodos GET e HEAD, para atualizar uma entidade cacheada que possui um ETag associado.
  • Para outros métodos, e em particular para PUT, If-None-Match usado com o valor * pode ser utilizado para salvar um arquivo que não se sabia existir, garantindo que outro upload não tenha acontecido anteriormente, perdendo os dados do PUT anterior; esse problema é uma variação do problema de perda de atualização.
Tipo de cabeçalho Request header
Forbidden header name não

Sintaxe

If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *

Diretivas

<etag_value>

Tags de entidade que representam unicamente os recursos requisitados. Eles são uma cadeia de caracteres ASCII colocados entre aspas duplas (como "675af34563dc-tr34"). Elas podem ser prefixadas por W/ para indicar que o algoritmo de comparação fraco deve ser utilizado (Isso é inútil com If-None-Match por ele utilizar somente este algoritmo).

*

O asterísco é um valor especial representando qualquer recurso. Eles somente são úteis quando fazendo o upload de um recurso, geralmente com PUT, para checar se outro recurso com a identidade já teve seu upload feito anteriormente.

Exemplos

If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

If-None-Match: W/"67ab43", "54ed21", "7892dd"

If-None-Match: *

Especificações

Especificação Título
RFC 7232, sessão 3.2: If-None-Match Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests

Compatibilidade com navegadores

BCD tables only load in the browser

Veja também