【问题标题】:Random hex characters being inserted into web source code随机十六进制字符被插入到 Web 源代码中
【发布时间】: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


【解决方案1】:

这几乎肯定是由用户端的代理引起的。

如果没有更多信息,我的最佳猜测是您正在发送 HTTP1.1 响应,但用户的代理将其解释为 HTTP1.0(因为它真的很旧或配置错误)。

您可以通过让他们绕过他们的代理来进行测试,或者使用他们的调试工具检查他们实际收到的内容,或者只是强制您对 HTTP1.0 做出所有响应,然后看看会发生什么。


(如果我必须花钱的话,我会说一个透明的鱿鱼代理,很想知道我是否正确!)

【讨论】:

  • 谢谢 - 我已要求他们加载一个页面,该页面将检测他们正在使用的代理并将结果发送给我。如果你是对的,我会告诉你的。
  • 这就是我现在所知道的 - 有这个问题的人肯定在运行代理。我们放入了一些代码来检测代理,并且在每种情况下它都在那里。在他们可以将其关闭的地方,它开始正常工作。我还能做些什么来绕过他们的代理吗?
  • 我对这些协议和代理了解不多。我是一名程序员,所以很感激你能给我的任何帮助。我将我们的主机推荐到此链接,他们说“请注意,分块传输编码是 HTTP/1.1 功能,目前可在您服务器上安装的版本上使用。降级到 HTTP/1.0 在这里不是一个可能的解决方案,因为那些cPanel 现在甚至不支持旧版本。在阅读文档时,指定的选项很少,例如在标头上设置 Content-Length 以覆盖分块的 Transfer-Encoding。"
  • 我确实在TestProxy 设置了一个测试页面。对于那些有问题的人,它会检测到代理并打印出 1000 行。每 80 行它添加一个 1f23 或类似的东西。这与我们在其他页面上看到的症状相同。我们确实在Second proxy test 做了另一个测试页。这个开头有一个 php 标头(“HTTP/1.0 200 OK”),其中有一个元 http-equiv="Transfer-Encoding" content="chunked",但我承认我现在正抓着稻草。任何建议将不胜感激。
  • 最后一件事 - 我尝试通过公共代理,虽然我上面列出的页面确实检测到了代理,但页面上的任何地方都没有 1fxx。无论我使用什么网络,我永远看不到问题,但我有少数人(我认为不到 1%)拥有它。有些人在使用 AT&T 网络的 iphone 上看到它(我也有,但没有看到)。有什么想法可以模拟这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2014-01-04
  • 2014-07-03
  • 2023-04-09
  • 2020-05-15
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
相关资源
最近更新 更多