use the etag mechanism for caching, fixed #16