added ETag handling for browser caching