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
eHEAD
, para atualizar uma entidade cacheada que possui umETag
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 porW/
para indicar que o algoritmo de comparação fraco deve ser utilizado (Isso é inútil comIf-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
ETag
If-Unmodified-Since
If-Modified-Since
If-Match
304
Not Modified
412
Precondition Failed