title: Chrome ignores the ETag header and just uses the in memory cache/disk cache
body: <p>If I understand correctly, the flow for using ETags works as described now:</p>
  
  <ul>
  <li>Browser sends the request to the server. Server sends back the image with an ETag</li>
  <li>Browser saves the ressource along with the ETag</li>
  <li>On the next request, the browser sends the request with the header <code>If-None-Match</code> containing the saved ETag.</li>
  </ul>
  
  <p>When returning a response, chrome dev tools tells me these are my headers</p>
  
  <pre><code>Cache-Control:max-age=7200
  Connection:keep-alive
  Content-Type:image/png
  Date:Thu, 27 Apr 2017 13:42:57 GMT
  ETag:"b36f59c868d4678033d318a182658e18371df8f5"
  Expires:Thu, 27 Apr 2017 15:42:57 GMT
  Server:nginx
  Transfer-Encoding:chunked
  X-Debug-Token:873c8f
  X-Debug-Token-Link:http://localhost:8081/_profiler/873c8f
  </code></pre>
  
  <p>Now, when I reload the page, the new image isn't gathered, though. It's saved through Chrome's in-memory cache or disk cache as you can see here</p>
  
  <p><a href="https://i.stack.imgur.com/S4P2u.png" rel="noreferrer"><img src="https://i.stack.imgur.com/S4P2u.png" alt="Chrome dev tab"></a></p>
  
  <p>But why is this happening? I sent an ETag so why does the browser not make another request to the server but instead uses it's own cache?</p>
  
  <p>The reason I'm asking is, that we want to cache our images, but as soon as they change, they should be updated immedietely. Why does Chrome do that?</p>
  
  <p><strong>Update</strong><br>
  I just noticed that it works as intendent on Firefox, so this seems to be a chrome "feature" and not a configuration one.</p>
  
  <p><strong>Update 2</strong><br>
  After setting my new headers for image like this</p>
  
  <pre><code>Cache-Control:max-age=0, private
  Connection:keep-alive
  Content-Type:image/png
  Date:Thu, 27 Apr 2017 14:44:57 GMT
  ETag:"e5b18bdebe44ed4bba3acb6584d9e6a81692ee27"
  Expires:Fri, 27 Oct 2017 14:44:57 GMT
  Server:nginx
  Transfer-Encoding:chunked
  X-Debug-Token:3447a6
  X-Debug-Token-Link:http://localhost:8081/_profiler/3447a6
  </code></pre>
  
  <p>Chrome still uses the disk cache to laod the data. This is my nginx now</p>
  
  <pre><code>location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
    access_log off;
    add_header Cache-Control "max-age: 0, must-revalidate";
  }
  </code></pre>
  
  <p><strong>Update 3</strong><br>
  I just did some further research. As soon as the Expires tag is set, Chrome uses the in-memory or disk-cache. Same with <code>max-age</code>. Which I don't understand, even when <code>must-revalidate</code> is set, as soon as <code>Expires</code> or <code>max-age=&gt;0</code> is set, Chrome doesn't reload the ressource. </p>