serve(): generate and cache ETags using sha1 digest, set ETag header