Chrome “False Start” 引起的 Error 7 (net::ERR_TIMED_OUT): The operation timed out

英文提示:This webpage is not available. Error 7 (net::ERR_TIMED_OUT): The operation timed out.

中文提示:此网页无法访问。错误 7 (net::ERR_TIMED_OUT):操作超时。

(这个画面与Windows蓝屏有得一拚)

上面的画面,你用Chrome逛园子时遇到过吗?你为此郁闷过吗?。。。

我多次遇到过,我深深郁闷过,甚至想过与Chrome分手,这种又爱又恨的感觉你懂的。。。

世上也许有无缘无故的爱,但没有无缘无故的恨。有时恨是因为爱,有时恨是因为误解。不要因为恨而放弃,而是要找到其中的原因。

在代码世界,一切问题都有因,代码不会掷骰子。

面对问题,没有其他选择,只有化郁闷为力量,寻找"Error 7 (net::ERR_TIMED_OUT): The operation timed out"的真正原因。

在互联网汪洋中,搭上Google这条大船,苦苦寻觅...终于找到了两条重要的线索:

1. Google Chrome’s new False Start “Feature”

1.1 我根据自己的理解大概翻译一下:

不知哪个版本开始,Chrome引入了一个新特性——"False Start",这个特性是为了提高基于SSL,TLS的安全通信的速度(HTTPS用到的)。在浏览器与Web服务器建立安全信道需要消息的往返(一来一回),而"False Start"减少了其中一个,从“往返”变成了“单程”(是有来无回,还是有去无回,目前还不知道)。

"False Start"改善了使用HTTPS协议的网站的访问速度。但是很多网站的Web服务器并不能正确处理"False Start",Chrome能智能地判断所访问的网站是否支持"False Start"(个人猜测这个判断是“云判断”,需要连接Google的服务器),如果不支持,Chrome会自动禁用"False Start"。

于是,那些使用私有局域网的用户(不能访问互联网,之前猜测的“云判断”不能工作)在访问不支持"False Start"的站点时(旧版的Apache, IIS, Tomcat,这里未提IIS),就会出现"Error 7 (net::ERR_TIMED_OUT): The operation timed out"。

1.2 我的分析:

问题出现的前提条件是:a) Web服务器不支持"False Start"; b) Chrome不能判断出目标站点是否支持"False Start",默认启用"False Start"。

于是,当Chrome以"False Start"的方式访问不支持"False Start"的站点时,就会出现"Error 7 (net::ERR_TIMED_OUT): The operation timed out"。

联系到我们的实际情况,"Error 7 (net::ERR_TIMED_OUT): The operation timed out"不是每次访问园子时都出现,出现没有规律,多数情况下不会出现,出现后多刷几次就会正常。个人猜测,当Chrome能正确判断出园子不支持"False Start",就不会出现这个问题(由于我们的Web服务器用的是IIS,由此可以推断IIS不支持"False Start")。而当某种原因造成Chrome不能判断出目标站点是否支持"False Start",默认启用"False Start"进行访问时,就出问题了。根据之前的猜测,Chrome的这个判断可能是“云判断”,不能判断的可能性很大的原因就是短暂的无法与Google服务器进行连接。

2. Request to look into IIS7 support for "SSL False Start"

这是微软IIS官方站点上的一个帖子,楼主发现了IIS7/7.5不支持Chrome “False Start”的问题,并反馈在论坛中。

得到的回答是:"False Start"不是SSL标准,是Chrome为了改善SSL的性能而增加的,其他浏览器都不支持这个功能。

个人感想:让微软专门针对Chrome改进IIS,改进后让Chrome在SSL方面表现比IE好,于情于理,微软都不会干的。

问题原因小结

1. IIS不支持Chrome的“False Start”特性。

2. 某种原因造成Chrome短暂的无法与Google服务器连接,从而无法判断出目标站点是否支持“False Start”,于是默认启用"False Start"进行访问。(个人猜测,未经证实)

解决方法

关闭Chrome的“False Start”特性。操作方法:

1. 在桌面上创建Chrome的快捷方式;

2. 选中该快捷方式,右键“属性(Proterties)”;

3. 在“目标(target)”中,在chome.exe之后输入参数: -disable-ssl-false-start

该方法确实有效,已经过验证。

Google Chrome’s new False Start “Feature”一文中还提到另外一个方法,使用参数 –use-system-ssl,强制Chrome使用Windows自带的SSL库(Windows-SCHANNEL)。

但是,对于一个网站来说,让所有使用Chrome的用户进行这样的更改显然是不现实的,更好的解决方法是:

1. 等待Chrome的改进,默认不启用“False Start”;

2. 等待“False Start”成为SSL标准,让IIS不得不支持;

3. 在IIS之前增加支持“False Start”的反向代理服务器。

小结

一段Chrome与IIS之间的小故事,却给多少人了带来烦恼,我们都不知道该怨谁。但我们可以从中得到启发 —— 在软件行业中,标准是多么多么的重要!

原文地址:https://www.cnblogs.com/dudu/p/Chrome_ERR_TIMED_OUT_The_operation_timed_out_False_Start.html