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 添加的浏览器错误标头的主要内容,如果未能解决你的问题,请参考以下文章