【发布时间】:2014-09-10 21:57:15
【问题描述】:
仅在某些计算机上,但在所有经过测试的浏览器(Chrome、Safari、IE 和 Firefox)上,一些随机十六进制代码被插入到我们网页的源代码中。它们似乎大约每 8000 个字符,并且通常在它之前和之后包含一个新行。以下是出现问题的页面示例:
<td align="center"
class="rownumber weight_row" style="font-size:23px;font-weight:bold;font-family:Garamond, Arial, Helvetica, sans-serif"
id="gamepoints_
1f57
3442">1</td>
<td align="center">
正确的代码如下所示:
<td align="center"
class="rownumber weight_row" style="font-size:23px;font-weight:bold;font-family:Garamond, Arial, Helvetica, sans-serif"
id="gamepoints_3442">1</td>
<td align="center">
额外的 1f57 不在我们的源代码中,它似乎在整个页面中随机出现,在不同位置中断了代码。它似乎每 8000 个字符出现一次,通常是 1fxx,但也可以是 20xx 或 1dxx,其中 xx 是十六进制数。很难弄清楚为什么它只发生在极少数用户身上(我们有 20,000 个用户,我知道有 4 个发生这种情况),而我无法在我拥有的任何计算机上实现它。此外,对于一个人来说,他去了一个新位置并且问题停止了(用他的笔记本电脑飞了),所以我不确定它是否与 IP 地址有关。任何有关解决此问题的帮助将不胜感激。这些额外的字符导致页面上的 javascript 代码失败。
更新: Web 堆栈是 CentOS 版本 6.5、Apache/2.0.64、MySQL 5.1.73、PHP 5.2.9。我已经确认我们的服务器正在使用 HTTP1.1 响应。
更新#2: 每个有问题的人都在运行代理。它似乎与 Transfer-Encoding: chunked 有关。在 stackoverflow 上发现这个建议添加标题:
php inserts HEX number of characters before the content
但是,当我将标头(“Transfer-Encoding: chunked”)添加到 php 代码内的文件顶部时,页面不会加载。
所以不知何故,通过这些代理将标头解释为未进行块编码。有没有办法让我在最后添加一些东西以使其正确解释?
【问题讨论】:
-
可能与分块编码有关?也许您的
Content-Encoding标头是错误的。也许您正在向不支持它的客户端(真正的旧浏览器)发送分块编码。 -
@Jim 如果您可以使用wireshark 捕获请求/响应,这将很有帮助。
-
@T.J.Crowder - 您还希望我提供哪些其他信息?我确实知道,对于一个人来说,它在全新安装的 Chrome 上不起作用,然后他飞到一个新城市,在那里它运行良好,没有问题。我正在尝试做一些 Hamish 建议的事情。我会发布我得到的结果。
-
@Jim:您添加到问题末尾的信息正是我想要的。一般来说,当你问一个问题时,最好停留几分钟,这样你就可以回答这样的问题;它使您更有可能得到有用的答案。所以当你一个小时左右没有回复时,我投票决定关闭,因为缺乏细节(我现在撤回投票)。
-
页面内容是PHP动态生成的吗?只是想帮助找出问题出在哪一层。
标签: javascript html