【问题标题】:How to remove specific HTTP response headers in PHP?如何在 PHP 中删除特定的 HTTP 响应标头?
【发布时间】:2011-06-01 23:32:38
【问题描述】:

我想删除以下标题:

Connection: Keep-Alive
Server: Apache/2.2.13 (Win32)
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=66

【问题讨论】:

  • 你知道这些头域是干什么用的吗?
  • 嗯..是的,我认为他们为自己说话?

标签: php header http-headers


【解决方案1】:

我认为这不能在 PHP 中正确完成,因为这些标头是由 Apache 设置的。

有 PHP 5.3 的 header_remove() 但这只能删除 PHP 设置的标头(如果我理解正确的话)。您也可以通过使用空值再次发送它们来覆盖不需要的标头,但无论如何都会发送原始值。

最好的办法是在 Apache 的配置中从根本上解决这个问题。例如,ServerTokens 指令可以更改“Server:”标头。

相关:apache_response_headers()

【讨论】:

  • “由 PHP 设置”是什么意思?你认为HostConnectionContent-TypeX-Powered-By“由PHP设置”吗?
  • @Pacerier header_remove() 只能删除以前在 PHP 中由 header() 设置的标头。您提到的前两个标头通常由 Apache 设置。是否可以使用header_remove() 删除x-powered-by 我不知道,但我猜不会。 Content-type 可以由 PHP 脚本设置,如果是,它可能会被header_remove() 撤销。
  • 我似乎可以在这里删除x-powered-by。这不是Apache设置的吗? Apache 和 PHP 的界限在哪里?
  • @Pacerier 可能是 PHP 设置的
【解决方案2】:

你可以把你的脚本变成一个非解析头 CGI。为此,您必须将 example.php 脚本重命名为 nph-script.cgi,使其可执行 (+x) 并添加 shebang:

#!/usr/bin/php-cgi
<?php

这需要您自己发送 ALL http 标头,包括HTTP/1.0 200 OK 状态行。 (见 rfc2616 php.ini 配置)

哦,实际上我不知道这是否仍然适用于当前的 Apache 版本。

【讨论】:

  • Windows 上#!/usr/bin/php-cgi 的等价物是什么?
  • @Pacerier 没有真正的等价物。您将剥离 shebang,将 .php 文件扩展名绑定到 cgi 解释器,或者手动调用它。
【解决方案3】:

使用 PHP(或任何其他服务器站点语言)并发送标头 Connection: close。这将导致 Apache 省略 Keep-Alive 标头,因为连接不再是 keepalive。例如

header('Connection: close');

不确定它是否适用于所有类型的服务器,欢迎提出建议。

阅读更多here

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2011-07-05
    • 2013-04-26
    • 2016-05-25
    • 2013-12-09
    • 2017-01-18
    相关资源
    最近更新 更多