I know this question is asked several times. But still I do not quite understand this concept. After reading many blogs and answers in SO, what I got is
Expiry headers are used when you don't even want client (and proxies/caches) to make a request to the server. In ETAG, the client will check with the server for the update, but in expiry headers, the client will know, when to expire the file and check for an update, till then it (browsers and proxies/caches) won't bother server for checking the update.
Therefore, it is mostly said that if we use the expires / max-age header, it does not even check the server for an updated file. So I decided to check it locally.
So, I created a simple html file including 2 js files and 1 image file. In IIS, I set the Expires header to 2 days for the image folder. So, in my understanding, after receiving the image file from the server once, for the next request, it should not send a request to the server to verify that the image file has been changed or not.
But every time I refresh the page, I see a request sent to the server, and the server returns the status 304 not modified . But according to the specifications / blogs I read, it should not send a request to the server.
Someone please explain.

source share