I have a webapp that serves an image:

I'm clearly setting the Cache-Control header properly, and the web server is setting the Etag.
The problem is that the resources is being If-None-Matched every single time effectively ignoring the Cache-Control header. (The framework is returning 304 accordingly but the roundtrip exists).
I've read that the Etag header may overrule Cache-Control and still go to check the match even if the resource is local and valid. This makes no sense to me.
Anyone knows what's going on? What am I missing here?
PD: The web server is a Play! application