I have a newly registered domain with only a sparse page up as the index so far. It's been getting crawled fairly regularly by Google, Baidu and Yahoo. Google and Baidu are sending If-Modified-Since (Baidu is also sending If-None-Match) and are receiving 304 Not Modified responses each time they crawl. Yahoo sends neither header and is requesting the full page every single time. This is without any explicit cache headers set on my end.
That is to be expected. `If-None-Match` and `Etag` are a relatively late caching strategy, that is done at the server (or edge) side.
Have you tried serving your pages with `Expires` and `Cache-Control` headers? I you give it - say - a timeout of a week, then a well-behaving client shouldn't retry before that time has went by.