I am serving dynamic requests behind the Nginx HTTP server. HTTP
are mostly from mobile HTTP clients. That’s is why I care about two
- Do not send the same representation twice: Use ETag caching
- Make better us of available bandwidth: Use Accept-Encoding HTTP
Today I noticed that these two don’t match. My application sets the ETag
header in the response, but when I set the ‘Accept-Encoding: gzip’ in
request header, nginx clears the ETag header when gzipping on-the-fly.
I understand why this is: If two responses have the same ETag, their
should be byte-for-byte comparable. When the content is gzipped, and
actually modified, this is of course not the case. The gzipped response
not equal to the non-gzipped response.
That’s why there are two ETag validation mechanisms. A strong
used in case of byte-for-byte comparable responses, and a weak
to indicate semantic equivalency.
In the case of weak validation an ETag would look like:
Why is Nginx stripping weak ETag validators in its gzip filter?