diff options
author | Igor Sysoev <igor@sysoev.ru> | 2011-07-30 07:34:12 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2011-07-30 07:34:12 +0000 |
commit | d743a2339ef8f6f9de01847c34d74f2c035539d6 (patch) | |
tree | 3f659c6d0ad231bb4b4bfc20036c293cfe8806e5 /src/http/ngx_http_core_module.c | |
parent | 6652cc596221b455ebe50cf77d5cc3a4116d5fa7 (diff) | |
download | nginx-d743a2339ef8f6f9de01847c34d74f2c035539d6.tar.gz nginx-d743a2339ef8f6f9de01847c34d74f2c035539d6.zip |
Accept-Encoding refactoring: test first the most common case "gzip,"
Diffstat (limited to 'src/http/ngx_http_core_module.c')
-rw-r--r-- | src/http/ngx_http_core_module.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index 02deb0ac0..cfb7eb9d0 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -2013,23 +2013,43 @@ ngx_http_auth_basic_user(ngx_http_request_t *r) ngx_int_t ngx_http_gzip_ok(ngx_http_request_t *r) { + u_char *g; time_t date, expires; ngx_uint_t p; ngx_array_t *cc; - ngx_table_elt_t *e, *d; + ngx_table_elt_t *e, *d, *ae; ngx_http_core_loc_conf_t *clcf; r->gzip_tested = 1; - if (r != r->main - || r->headers_in.accept_encoding == NULL - || ngx_strcasestrn(r->headers_in.accept_encoding->value.data, - "gzip", 4 - 1) - == NULL) - { + if (r != r->main) { return NGX_DECLINED; } + ae = r->headers_in.accept_encoding; + if (ae == NULL) { + return NGX_DECLINED; + } + + if (ngx_strncmp(ae->value.data, "gzip,", 5) == 0) { + /* + * test for the most common case "gzip,...": + * MSIE: "gzip, deflate" + * Firefox: "gzip,deflate" + * Chrome: "gzip,deflate,sdch" + * Safari: "gzip, deflate" + * Opera: "gzip, deflate" + */ + goto found; + } + + g = ngx_strcasestrn(ae->value.data, "gzip", 4 - 1); + if (g == NULL) { + return NGX_DECLINED; + } + +found: + clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); if (r->headers_in.msie6 && clcf->gzip_disable_msie6) { |