disable keepalive for Safari:

https://bugs.webkit.org/show_bug.cgi?id=5760
This commit is contained in:
Igor Sysoev 2010-02-01 12:01:01 +00:00
parent 4e20f24b5b
commit 8164f329fe
3 changed files with 20 additions and 6 deletions

View File

@ -783,14 +783,24 @@ ngx_http_handler(ngx_http_request_t *r)
break;
}
if (r->keepalive && r->headers_in.msie && r->method == NGX_HTTP_POST) {
if (r->keepalive) {
/*
* MSIE may wait for some time if an response for
* a POST request was sent over a keepalive connection
*/
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;
}
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) {

View File

@ -1450,6 +1450,9 @@ ngx_http_process_user_agent(ngx_http_request_t *r, ngx_table_elt_t *h,
} 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;
}

View File

@ -220,6 +220,7 @@ typedef struct {
unsigned opera:1;
unsigned gecko:1;
unsigned chrome:1;
unsigned safari:1;
unsigned konqueror:1;
} ngx_http_headers_in_t;