As far as I know, there is no good way to measure open rate. You can see if images in your html email are loaded. But that could also happen automatically or in a preview pane that is displayed by default.
The reason why I shy away from measuring CTR is that I then cannot give people the real url. I like to directly give them the final url instead of some intermediate page. Maybe it's just me, but I prefer that.
Only for repeat opens. The original open still accesses a particular URL specific to that recipient so the open is recorded even if Gmail hides IP, browser, OS, and other data via their proxy. If the user doesn't view the images, that open is never recorded anyway. So, the caching doesn't actually affect the open rate.
Could you use a url parameter on the end of the real url (e.g. example.com/page?source=email_[date]), and then use the history object to strip the param once they land on the url (modern browsers)?