atom feed14 messages in ru.sysoev.nginxRe: Latency problem with one browser
FromSent OnAttachments
Andrea SoracchiMar 2, 2012 4:38 am.Other, .conf, .Other, 2 more
Maxim DouninMar 2, 2012 5:08 am 
MaxMar 2, 2012 5:15 am 
Maxim DouninMar 2, 2012 5:51 am 
Andrea SoracchiMar 2, 2012 7:52 am 
MaxMar 2, 2012 8:27 am 
Piotr SikoraMar 2, 2012 8:33 am 
MaxMar 2, 2012 8:48 am 
Maxim DouninMar 2, 2012 10:01 am 
Piotr SikoraMar 4, 2012 5:39 am 
Maxim DouninMar 4, 2012 9:40 am 
Piotr SikoraMar 4, 2012 12:35 pm 
Piotr SikoraMar 4, 2012 1:08 pm 
Maxim DouninMar 15, 2012 11:42 am 
Subject:Re: Latency problem with one browser
From:Piotr Sikora (piot@frickle.com)
Date:Mar 4, 2012 5:39:19 am
List:ru.sysoev.nginx

Hi Maxim,

Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) \ AppleWebKit/534.8+ (KHTML like Gecko) version/0.0.1 Safari/534.8+

Detecting all browsers (thousands of them) which pretend to be Safari is not an option. And, after all, browsers use other's product token for reason, and workarounds for bugs is what they expect to get as a result.

Except that PlayBook isn't a browser, it's a device ;)

I'm planning to disable this Safari workaround by default instead, the following patch is already sitting in my queue:

# HG changeset patch # User Maxim Dounin <mdou@mdounin.ru> # Date 1330697796 -14400 # Node ID 88e257b4bd3d61e30d1421ab6f2e417a8baedb96 # Parent 277a1822fc5cf7ad83297c74839ca8c84a49680c Removed safari from keepalive_disable default.

The bug in question is likely already fixed (though unfortunately we have no information available as Apple's bugtracker isn't open), and the workaround seems to be too pessimistic for modern versions of Safari as well as other webkit-based browsers pretending to be Safari.

diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -3568,8 +3568,7 @@ ngx_http_core_merge_loc_conf(ngx_conf_t ngx_conf_merge_bitmask_value(conf->keepalive_disable, prev->keepalive_disable, (NGX_CONF_BITMASK_SET - |NGX_HTTP_KEEPALIVE_DISABLE_MSIE6 - |NGX_HTTP_KEEPALIVE_DISABLE_SAFARI)); + |NGX_HTTP_KEEPALIVE_DISABLE_MSIE6)); ngx_conf_merge_uint_value(conf->satisfy, prev->satisfy, NGX_HTTP_SATISFY_ALL); ngx_conf_merge_uint_value(conf->if_modified_since, prev->if_modified_since,

I don't really agree with this, it's analogues to removing IE work-around instead of restricting it to versions older than IE6 SV1. I was looking at this issue over the weekend and the "keepalive_disable safari" option is simply too broad and that's what needs to be fixed.

According to https://bugs.webkit.org/show_bug.cgi?id=5760#c38, the underlying issue was in the Foundation framework on iOS/OSX, not Safari, which means that Safari on Windows as well as everything else (Android, BlackBerry, etc.) that uses WebKit was never affected.

I agree with you and I believe that it's fixed in the most recent releases of iOS/OSX, but I wouldn't bet that it's fixed in iOS 4.x, OSX 10.6.x or older releases, so why should we disable the work-around for them?