为什么一个浏览器慢速连接显示原始的HTML(而不是解释它)?

我有几个人在他们的浏览器中看到原始html的报告(而不是他们的浏览器解释)。 这似乎发生在慢速连接上。 发生这种情况时,如果用户重新加载页面,页面被正确解释。 有没有任何服务器特定的事情会导致这种情况发生? 我们使用Php 5.1.6和Apache 2.2.3。

立即想到两种可能的情况:

  1. 通过“原始HTML”,如果你的意思是“解释,但没有风格”,那么这最经常发生在严格用CSSdevise的页面来完成所有的样式,因为样式表只在html被加载后被下载。 你可能想要尝试的是embedded一些非常基本的样式内嵌在HTML头部分,这将至less意味着该页面将看起来是“可接受的”,直到剩下的样式表代码已被下载。 如果样式表从来没有在第一次加载的时候真正地把它传递给客户端,即使在耐心的等待之后,你也可能想要增加连接超时,这可能会阻止所有文件的下载正确地显示页面。

  2. 通过“原始html”,你的意思是“没有解释,没有任何forms的纯文本!DOCTYPE和html标签可见”,那么它可能是一个甚至更慢的情况下,我上面描述,或者你的PHP脚本可能被设置为刷新在html完全生成之前向客户端返回响应缓冲区(然而,即使在这种情况下,大多数浏览器仍然会做出合理的解释HTML的尝试)。

我会睡在上面,如果在别人想出更具体的东西之前想到更多的想法,我会相应地更新我的答案

这个问题的常见原因,我见过使用PHP的Drupal的工作,是一个错误信息,并在输出中写入<!DOCTYPE html><html>输出。 然后,浏览器可能会将输出解释为纯文本,因为在文档的开始处没有看到带有X字符的标签。 (它通常会愉快地跳过一定数量的数据,我看到一个RSS feed,它将以2个随机字节开始,第一个甚至可以是零,Firefox仍然很开心,它会忽略那些字节!)

避免这个问题的一个解决scheme(假设是这个问题)是确保你的生产环境不会把PHP错误输出到输出缓冲区。 在php.ini中有设置 – 虽然知道这些可以在PHP代码中被覆盖:

 error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);