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:
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
....
Radek