4

谷歌浏览器仍然面临一个奇怪的问题。我有一个从 php 源代码生成的 text/html 页面。此页面加载良好,并且在除 Chrome 之外的任何流行浏览器上都能很好地显示。当源代码刚刚保存时,Chrome 会以正确的方式加载和呈现文件。即使我只是添加或删除了一个空格字符。接下来,如果我尝试刷新页面,Chrome 会显示一个空白页面,并在“开发者工具”面板(见屏幕截图)中显示一个错误,指示“失败”状态。但如果我检查 HTTP 响应标头,一切似乎都很好,包括 HTTP 状态:200 OK。

HTTP/1.1 200 OK
Date: Mon, 17 Sep 2012 08:37:03 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.3.14
Expires: Mon, 17 Sep 2012 08:52:03 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

Bellow 是保存源并获得正确渲染后的 HTTP 响应标头。无变化(时间相关信息除外)

HTTP/1.1 200 OK
Date: Mon, 17 Sep 2012 08:56:06 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.3.14
Expires: Mon, 17 Sep 2012 09:11:07 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

我还检查了 HTTP 请求标头,它们在两种情况下都是相同的:

工作案例:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie:PHPSESSID=qn01olb0lkgh3qh7tpmjbdbct1
Host:(hidden here, but correct, looks like subsubdomain.subdomain.domain.tld)
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1

失败案例:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie:PHPSESSID=qn01olb0lkgh3qh7tpmjbdbct1
Host:(also hidden)
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1

我注意到即使页面失败,其他一些资源(javascript、样式表)也会成功加载或从本地缓存中检索。我也可以每次都成功访问 HTML 源代码,页面是否被呈现(HTML 代码是它预期包含的内容)。

我还运行了 Wireshark 以查看在传输数据或其他东西时是否会出现问题,但在这方面似乎一切正常。

如果 HTTP 标头中提供的信息与交付文件的有效大小不同,我在 Google 上阅读了有关内容长度的内容,这将使 Chrome 失败。在我看来,情况并非如此,因为没有提供内容长度。

欢迎任何帮助!谢谢!

4

1 回答 1

2

对于那些仍然遇到问题的人:将 setEnv downgrade-1.0 添加到您的 .htaccess 中,对我来说它可以作为临时修复。它禁用分块传输。

另一种解决方案是将用户代理设置为 IE,显然它也是如此......

实际问题在某种程度上与服务器配置有关,我也看到分段错误错误。我遇到此行为的站点通过 HTTPS 在 PHP 5.3.27 上运行。

编辑:网站是通过 HTTPS 还是 HTTP 访问都没有关系。

编辑2:这个错误的原因是一个非常长的行,将它分成多行解决了这个问题。

于 2013-10-22T09:05:02.587 回答