# HG changeset patch # User Igor Sysoev # Date 1265025661 0 # Node ID fcd72b8d69f3e6251010844cd10a211d10d87d55 # Parent a076e182373709878549bafaf5dc77d7a4e4818b disable keepalive for Safari: https://bugs.webkit.org/show_bug.cgi?id=5760 diff -r a076e1823737 -r fcd72b8d69f3 src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c Fri Jan 29 16:45:14 2010 +0000 +++ b/src/http/ngx_http_core_module.c Mon Feb 01 12:01:01 2010 +0000 @@ -783,14 +783,24 @@ break; } - if (r->keepalive && r->headers_in.msie && r->method == NGX_HTTP_POST) { - - /* - * MSIE may wait for some time if an response for - * a POST request was sent over a keepalive connection - */ - - r->keepalive = 0; + if (r->keepalive) { + + if (r->headers_in.msie) { + if (r->method == NGX_HTTP_POST) { + /* + * MSIE may wait for some time if an response for + * a POST request was sent over a keepalive connection + */ + r->keepalive = 0; + } + + } else if (r->headers_in.safari) { + /* + * Safari may send a POST request to a closed keepalive + * connection and stalls for some time + */ + r->keepalive = 0; + } } if (r->headers_in.content_length_n > 0) { diff -r a076e1823737 -r fcd72b8d69f3 src/http/ngx_http_request.c --- a/src/http/ngx_http_request.c Fri Jan 29 16:45:14 2010 +0000 +++ b/src/http/ngx_http_request.c Mon Feb 01 12:01:01 2010 +0000 @@ -1450,6 +1450,9 @@ } else if (ngx_strstrn(user_agent, "Chrome/", 7 - 1)) { r->headers_in.chrome = 1; + } else if (ngx_strstrn(user_agent, "Safari/", 7 - 1)) { + r->headers_in.safari = 1; + } else if (ngx_strstrn(user_agent, "Konqueror", 9 - 1)) { r->headers_in.konqueror = 1; } diff -r a076e1823737 -r fcd72b8d69f3 src/http/ngx_http_request.h --- a/src/http/ngx_http_request.h Fri Jan 29 16:45:14 2010 +0000 +++ b/src/http/ngx_http_request.h Mon Feb 01 12:01:01 2010 +0000 @@ -220,6 +220,7 @@ unsigned opera:1; unsigned gecko:1; unsigned chrome:1; + unsigned safari:1; unsigned konqueror:1; } ngx_http_headers_in_t;