1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
---
title: If-None-Match
slug: Web/HTTP/Headers/If-None-Match
tags:
- Cabeçalho HTTP
- Cabeçalho de requisição
- HTTP
- Referencia
- Requisições Condicionais
translation_of: Web/HTTP/Headers/If-None-Match
---
<div>{{HTTPSidebar}}</div>
<p>O cabeçalho de requisição HTTP <strong><code>If-None-Match</code></strong> faz uma requisição condicional. Para os métodos {{HTTPMethod("GET")}} e {{HTTPMethod("HEAD")}}, o servidor irá mandar de volta o recurso requisitado, com um código de status {{HTTPStatus("200")}}, somente se ele não tiver um {{HTTPHeader("ETag")}} correspondendo as <em>tags</em> dadas pela requisição. Para outros métodos, a requisição será processada somente o recurso existente eventualmente não possuir nenhuma<em> </em>{{HTTPHeader("ETag")}} correspondente nos valores listados.</p>
<p>Quando a condição falha para métodos {{HTTPMethod("GET")}} e {{HTTPMethod("HEAD")}}, então o servidor deve returnar 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.</p>
<p>A comparação com a {{HTTPHeader("ETag")}} guardada usa o <em>algoritmo de comparação fraco</em>, significa que dois arquivos são considerados idênticos se o conteúdo é equivalente — eles não precisam ser idênticos <em>byte</em> por <em>byte</em>. Por exemplo, duas páginas que diferem pela data de sua geração no rodapé ainda assim serão consideradas como idênticas.</p>
<p>Quando usado em combinação com {{HTTPHeader("If-Modified-Since")}}, <strong><code>If-None-Match</code></strong> tem precedência (se o servidor suporta isso).</p>
<p>Existem dois casos de uso comuns:</p>
<ul>
<li>Para métodos {{HTTPMethod("GET")}} e {{HTTPMethod("HEAD")}}, para atualizar uma entidade cacheada que possui um {{HTTPHeader("ETag")}} associado.</li>
<li>Para outros métodos, e em particular para {{HTTPMethod("PUT")}}, <code>If-None-Match</code> usado com o valor <code>*</code> pode ser utilizado para salvar um arquivo que não se sabia existir, garantindo que outro <em>upload</em> não tenha acontecido anteriormente, perdendo os dados do <em>PUT</em> anterior; esse problema é uma variação do <a href="https://www.w3.org/1999/04/Editing/#3.1">problema de perda de atualização</a>.</li>
</ul>
<table class="properties">
<tbody>
<tr>
<th scope="row">Tipo de cabeçalho</th>
<td>{{Glossary("Request header")}}</td>
</tr>
<tr>
<th scope="row">{{Glossary("Forbidden header name")}}</th>
<td>não</td>
</tr>
</tbody>
</table>
<h2 id="Sintaxe">Sintaxe</h2>
<pre class="syntaxbox notranslate">If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *</pre>
<h2 id="Diretivas">Diretivas</h2>
<dl>
<dt><etag_value></dt>
<dd><em>Tags</em> de entidade que representam unicamente os recursos requisitados. Eles são uma cadeia de caracteres ASCII colocados entre aspas duplas (como <code>"675af34563dc-tr34"</code>). Elas podem ser prefixadas por <code>W/</code> para indicar que o <em>algoritmo de comparação fraco</em> deve ser utilizado (Isso é inútil com <code>If-None-Match</code> por ele utilizar somente este algoritmo).</dd>
<dt><code>*</code></dt>
<dd>O asterísco é um valor especial representando qualquer recurso. Eles somente são úteis quando fazendo o <em>upload</em> de um recurso, geralmente com {{HTTPMethod("PUT")}}, para checar se outro recurso com a identidade já teve seu <em>upload</em> feito anteriormente.</dd>
</dl>
<h2 id="Exemplos">Exemplos</h2>
<pre class="notranslate">If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"
If-None-Match: W/"67ab43", "54ed21", "7892dd"
If-None-Match: *
</pre>
<h2 id="Especificações">Especificações</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Especificação</th>
<th scope="col">Título</th>
</tr>
<tr>
<td>{{RFC("7232", "If-None-Match", "3.2")}}</td>
<td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td>
</tr>
</tbody>
</table>
<h2 id="Compatibilidade_de_navegador">Compatibilidade de navegador</h2>
<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
<p>{{Compat("http.headers.If-None-Match")}}</p>
<h2 id="Veja_também">Veja também</h2>
<ul>
<li>{{HTTPHeader("ETag")}}</li>
<li>{{HTTPHeader("If-Unmodified-Since")}}</li>
<li>{{HTTPHeader("If-Modified-Since")}}</li>
<li>{{HTTPHeader("If-Match")}}</li>
<li>{{HTTPStatus("304")}}<code> Not Modified</code></li>
<li>{{HTTPStatus("412")}}<code> Precondition Failed</code></li>
</ul>
|