from https://github.com/jshttp/etag
by https://github.com/dougwilson