The problem with ETags is that they are typically constructed using attributes that make them unique to a specific server hosting a site. ETags won't match when a browser gets the original component from one server and later makes a conditional GET request that goes to a different server—a situation that is all too common on web sites that use a cluster of servers to handle requests. By default, both Apache and IIS embed data in the ETag that dramatically reduces the odds of the validity test succeeding on web sites with multiple servers.
The ETag format for Apache 1.3 and 2.x is
inode-size-timestamp. Inodes are used by
filesystems to store information such as file type, owner, group, and
access mode. Although a given file may reside in the same directory
across multiple servers and have the same file size, permissions,
timestamp, etc., its inode is different from one server to the
IIS 5.0 and 6.0 have a similar issue with ETags. The format for
ETags on IIS is
ChangeNumber is a counter used to track
configuration changes to IIS. It's unlikely that the
ChangeNumber is the same across all IIS
servers behind a web site.
The end result is that ETags generated by Apache and IIS for the exact same component won't match from one server to another. If the ETags don't match, the user doesn't receive the small, fast 304 response that ETags were designed for; instead, they'll get a normal 200 response along with all the data for the component. ...