If-None-Match
=============

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 with JavaScript enabled. Enable JavaScript to view data.

Veja também
-----------

* `ETag`
* `If-Unmodified-Since`
* `If-Modified-Since`
* `If-Match`
* `304` `Not Modified`
* `412` `Precondition Failed`