昨天被分到一个Bug,公司某产品在IE下偶尔会随机出现请求挂起,等待30秒后弹出超时错误(错误状态码:12152)的问题,而在FireFox或Chrome则从没有这样的问题。据说这个问题已经困扰他们四年多了,一直混着。直到最近在某个大客户的新环境中频频出现,才不得不专门找人( :cry: )解决。接到这个Bug,感觉就是某个经典的IE Repost问题,之前一直没有机会详细了解,借这个机会翻了一些资料,在这里总结一下。
[size=large]产生原因[/size]
现在的HTTP连接,特别是HTTPS连接,为了提高性能,几乎全部采用Keep-Live模式。也就是连接建立起来后会存活一段时间(数秒到数十秒不等),这段时间内的请求会重用这个连接。根据HTTP 1.1 (RFC 2616)标准,连接路径上的代理服务器,负载均衡服务器,应用服务器等节点都可以随时中止这个连接。一般情况下如果网速较快,连接被中止时浏览器会立刻知道,下一个请求就建立新连接,不会出现明显问题。但在网速不佳的环境中,会出现一种边界场景:浏览器发出了一个请求,但在请求还没到服务器前,服务器端认为连接超时,中止了连接。这时浏览器会立刻得到一个请求超时错误,根据RFC 2616标准,浏览器这时应该无须用户干预,自动重新建立新的连接并且重发之前的请求。各大浏览器都遵循了这个规范,因此在FireFox或Chrome下,用户根本不会意识到有Keep-Live连接超时这回事。
[quote]
原文如下:
A client, server, or proxy MAY close the transport connection at any time. For example, a client might have started to send a new request at the same time that the server has decided to close the "idle" connection. From the server's point of view, the connection is being closed while it was idle, but from the client's point of v
[size=large]产生原因[/size]
现在的HTTP连接,特别是HTTPS连接,为了提高性能,几乎全部采用Keep-Live模式。也就是连接建立起来后会存活一段时间(数秒到数十秒不等),这段时间内的请求会重用这个连接。根据HTTP 1.1 (RFC 2616)标准,连接路径上的代理服务器,负载均衡服务器,应用服务器等节点都可以随时中止这个连接。一般情况下如果网速较快,连接被中止时浏览器会立刻知道,下一个请求就建立新连接,不会出现明显问题。但在网速不佳的环境中,会出现一种边界场景:浏览器发出了一个请求,但在请求还没到服务器前,服务器端认为连接超时,中止了连接。这时浏览器会立刻得到一个请求超时错误,根据RFC 2616标准,浏览器这时应该无须用户干预,自动重新建立新的连接并且重发之前的请求。各大浏览器都遵循了这个规范,因此在FireFox或Chrome下,用户根本不会意识到有Keep-Live连接超时这回事。
[quote]
原文如下:
A client, server, or proxy MAY close the transport connection at any time. For example, a client might have started to send a new request at the same time that the server has decided to close the "idle" connection. From the server's point of view, the connection is being closed while it was idle, but from the client's point of v