Bug in supporting Quality zero (negate) parameter in Accept-Encoding

rburkat nginx-forum at nginx.us
Wed Aug 3 18:17:15 UTC 2011

Hi Igor, thanks for the quick patch.   This patch is different than the
nginx-1.1.0 code.  I assume the 1.1.0 code supersedes the patch as it
was posted later. If not, disregard.

The nginx-1.1.0 code has a bug in it.  ( from a glance the patch would
have been ok )

nginx-1.1.0 does not handle the case for  "gzip;q=1.0" correctly.  It
should compress and it does not.

I see that the code is exhaustive in it's validation of the 0.??? case,
but does not work for 1.0 1.00 1.000.  ( just "1" is ok )  

My quick hack to correct this was..

- if (p == last || *p == ',' || *p == ' ' ) {
+ if (p == last || *p == ',' || *p == ' ' || *p == '.') {

I took a quick log this morning from a production box of the most
frequent accept-encoding requests and the gzip;q=1.0 case is common.
In order of descending frequency...

Accept-Encoding: gzip, deflate
Accept-Encoding: gzip,deflate,sdch
Accept-Encoding: gzip,deflate
Accept-Encoding: gzip
Accept-Encoding: gzip, x-gzip
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Accept-Encoding: identity
Accept-Encoding: gzip;q=1.0, deflate;q=0.8, chunked;q=0.6,
identity;q=0.4, *;q=0
Accept-Encoding: deflate, gzip
Accept-Encoding: x-gzip, gzip, deflate
Accept-Encoding: identity,gzip,deflate
Accept-Encoding: gzip, deflate, x-gzip, identity; q=0.9  
Accept-Encoding: gzip;q=1.0, deflate;q=0.8, chunked;q=0.6
Accept-Encoding: identity; q=1


Posted at Nginx Forum: http://forum.nginx.org/read.php?2,213108,213335#msg-213335

More information about the nginx mailing list