Notes for future continued development
Support for ETag indexing and validation will have to be made to make full use of Vary.
One simple approach to do so is to update the "vary" object with the etags and matching request headers. This only have the slight complication that it is hard to know when one of the objects have expired.
The above might not be such a big problem. On cache revalidations for where we have a hit, the "old" object is first verified to be in the cache. If it is not then the existence of all listed objects are verified, and those objects not in the cache are excluded from the "vary" object list. If the "old" object is indeed in the cache, then any newer objects for the same entity most likely are too, eleminating the need to verify what is in the cache.
Minor problem: The verification is quite likely to bump the removal-policy access statistics for those object, possibly keeping an object in the cache for longer than intended. At least for some policies.