HTTP: Generating ETag Header

As long as it changes whenever the resource representation changes, how you produce it is completely up to you.

You should try to produce it in a way that additionally:

  1. doesn’t require you to re-compute it on each conditional GET, and
  2. doesn’t change if the resource content hasn’t changed

Using hashes of content can cause you to fail at #1 if you don’t store the computed hashes along with the files.

Using inode numbers can cause you to fail at #2 if you rearrange your filesystem or you serve content from multiple servers.

One mechanism that can work is to use something entirely content dependent such as a SHA-1 hash or a version string, computed and stored once whenever your resource content changes.

Leave a Comment