仅在某些计算机上,但在所有经过测试的浏览器(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
但是,当我将标题(&#34; Transfer-Encoding:chunked&#34;)添加到php代码内部文件的顶部时,该页面无法加载。
所以不知何故,标题是通过这些代理解释为不是块编码的。有没有办法让我在我的最后添加一些内容以使其正确解释?
答案 0 :(得分:0)
这几乎可以肯定是由用户端的代理引起的。
如果没有更多信息,我的最佳猜测是您发送HTTP1.1响应,但用户的代理正在将其解释为HTTP1.0(或者因为它确实是旧的或配置错误的。)
您可以通过要求他们绕过他们的代理进行测试,或者使用他们的调试工具检查他们实际收到的内容,或者只是强制所有对HTTP1.0的响应,看看会发生什么。
(如果我不得不把钱放在上面,我会说一个透明的鱿鱼代理,我很想知道我是不对的!)