【发布时间】:2015-07-05 19:29:53
【问题描述】:
在过去的两个月里,我在 Chrome 的开发者控制台上收到以下错误:
net::ERR_INCOMPLETE_CHUNKED_ENCODING
症状:
- 页面未加载。
- 截断的 CSS 和 JS 文件。
- 页面挂起。
服务器环境:
- Apache 2.2.22
- PHP
- Ubuntu
这发生在我们内部的 Apache 服务器上。这不会发生在其他任何人身上 - 即我们的用户都没有遇到这个问题 - 我们的开发团队中的其他人也没有。
其他人正在使用完全相同版本的 Chrome 访问完全相同的服务器。我还尝试禁用所有扩展程序并在隐身模式下浏览 - 无效。
我使用了 Firefox,并且发生了完全相同的事情。截断的文件等等。唯一的问题是,Firefox 不会引发任何控制台错误,因此您需要通过 Firebug 检查 HTTP 请求以查看问题。
来自 Apache 的响应标头:
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:close
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Mon, 27 Apr 2015 10:52:52 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:Apache/2.2.22 (Ubuntu)
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.10-1ubuntu3.8
在测试时,我可以通过在我的 htaccess 文件中强制使用 HTTP 1.0 来解决这个问题:
SetEnv downgrade-1.0
这解决了这个问题。但是,在 HTTP 1.1 上强制使用 HTTP 1.0 并不是一个合适的解决方案。
更新:因为我是唯一遇到此问题的人,所以我认为我需要花更多时间调查这是否是客户端问题。如果我进入 Chrome 的设置并使用“恢复为默认值”选项,问题会消失大约 10-20 分钟。然后它返回。
【问题讨论】:
-
您忘记了刹车。这是正确的 -> while($row = mysql_fetch_assoc($result))
-
@PHPMan 没有正确复制和粘贴。现在修好了。我希望这就是原因。
-
另外,需要知道这段代码生成的 HTML
while($row = mysql_fetch_assoc($result))可能是空行太多导致被浏览器截断 -
如果客户端没有收到分块传输的最终 0 长度块,则会引发该错误。在你的位置,我会启动 Wireshark 并捕获 TCP 流量以查看发生了什么。
-
这可能是由网络问题而不是应用程序问题引起的(尤其是因为您是唯一拥有它的人)。因此,您可能应该首先尝试通过监控流量来排除网络问题是可能的原因,正如@aergistal 建议的那样。
标签: php apache google-chrome chunked-encoding chunked