aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_core_module.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2011-07-30 07:34:12 +0000
committerIgor Sysoev <igor@sysoev.ru>2011-07-30 07:34:12 +0000
commitd743a2339ef8f6f9de01847c34d74f2c035539d6 (patch)
tree3f659c6d0ad231bb4b4bfc20036c293cfe8806e5 /src/http/ngx_http_core_module.c
parent6652cc596221b455ebe50cf77d5cc3a4116d5fa7 (diff)
downloadnginx-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.c34
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) {