X-Pad:避免 apache 添加的浏览器错误标头

Posted

技术标签:

【中文标题】X-Pad:避免 apache 添加的浏览器错误标头【英文标题】:X-Pad: avoid browser bug header added by apache 【发布时间】:2012-02-01 10:51:26 【问题描述】:

我看到这个标头附加到来自 apache 的响应中。它在新时代的浏览器中有什么意义吗?或者它只是为了规避旧版本 Netscape 中的错误。似乎很奇怪。

编辑

我正在对我们的应用程序进行性能测试,当我在 Jmeter 响应文本中看到它时,返回了这个奇怪的标题。它说:

X-pad: avoid browser bug

就是这样! 所以我尝试了一些谷歌搜索,它似乎是为 Netscape 浏览器的错误添加的标题。无论如何,我仍然很好奇,既然我们与那些版本的浏览器相距甚远(谢天谢地),是否有充分的理由证明它仍然存在。 我们使用apache2。

希望这些细节有所帮助。

干杯

【问题讨论】:

这个问题可以从一些细节中受益——具体是 What 标题和内容? (标题很难解析。将内容放在问题的 body 中...)——你发现哪个版本的 Apache 发出了这个标题?在什么条件下?这似乎是一个很好的发现,但几乎没有让它很棒的细节。 感谢您指出 iur sarnold;这确实是我的失误。在此处添加了更多详细信息。 哦,是的,好多了,谢谢。 :) 在测试我自己的 CLI 客户端时也注意到了这一点。如果您只在请求中发送 get 和 host 标头,它会在响应中返回 X-Pad 标头。 【参考方案1】:

不,现在它是一个退化的标题;也就是说,它被放在那里是为了解决一个过时的浏览器中的错误(比 IE6 早几代 - 该错误在 15 年前的 1997 年被报告修复!)并且没有人再使用它了。

The patch to remove it 自 2008 年以来就在 Apache 的 SVN 中,但它显然还没有传播到所有发行版(另外一些网站可能使用未更新版本的 Apache)。

这是标题的评论,取自from the source:

/* Navigator versions 2.x, 3.x and 4.0 betas up to and including 4.0b2
 * have a header parsing bug.  If the terminating \r\n occur starting
 * at offset 256, 257 or 258 of output then it will not properly parse
 * the headers.  Curiously it doesn't exhibit this problem at 512, 513.
 * We are guessing that this is because their initial read of a new request
 * uses a 256 byte buffer, and subsequent reads use a larger buffer.
 * So the problem might exist at different offsets as well.
 *
 * This should also work on keepalive connections assuming they use the
 * same small buffer for the first read of each new request.
 *
 * At any rate, we check the bytes written so far and, if we are about to
 * tickle the bug, we instead insert a bogus padding header.  Since the bug
 * manifests as a broken image in Navigator, users blame the server.  :(
 * It is more expensive to check the User-Agent than it is to just add the
 * bytes, so we haven't used the BrowserMatch feature here.
 */

【讨论】:

很好的回应!谢谢【参考方案2】:

我知道答案已被接受,但我仍然认为这对运行 php.ini 的用户很有用。 如果您是 php 用户并且您正在获取此标头。您可以使用自定义的“X-Powered-By”标头将其关闭。 例如:header('X-Powered-By: Powerful Management'); 您也可以通过这种方式将其删除 header_remove('X-Pad');,有时将该标头设置为空也会删除它:header('X-Pad:') 然后你的 X-Pad 标题就会消失

【讨论】:

我遇到了 X-Pad 头,并且(只是因为我很好奇,它并没有真正造成任何伤害)试图将其移除。你的方法行不通。当然,如果在一个请求中添加了 X-Pad,并且您添加了 X-Powered-By 标头,则该特定请求可能会消失 - 因为新标头现在用作填充,因此换行符不在位置 256 /257 了。但在另一个请求中(没有新的 X-Powered-By 标头的 X-Pad),它现在可能会出现,因为第一个换行符现在已移至 256。 对我来说,使用 PHP (header ('X-Pad :')) 将 X-Pad 设置为空值可以摆脱它 - Apache 似乎接受了这一点并且不会覆盖它(它适用于其他一些自动生成的标题,如内容长度)。有人可以验证吗?

以上是关于X-Pad:避免 apache 添加的浏览器错误标头的主要内容,如果未能解决你的问题,请参考以下文章

svn apache 配置后浏览器访问,不停的提示输入用户名密码,centos下配的,取消了就401错误

jquery 防止自动填充表单

Apache DBUtils 和标量值

sys错误

如何通过HTML改变我的chrome浏览器的标签名?

vb的WebBrowser控件怎样避免浏览器脚本错误?