【问题标题】:Delete a header in PHP删除 PHP 中的标头
【发布时间】:2018-12-30 12:58:30
【问题描述】:

为了允许缓存 PHP 生成的文件,我想确保 'Pragma: no-cache' 标头是 not 设置的。但是,如何删除可能已经设置的标题?

也就是说,可能有人在代码中的某处写了header('Pragma: no-cache');,现在我想确保没有发送标头。

这样做是否足够:

header('Pragma:');

还是有类似delete_header() 的东西(显然,它没有记录或隐藏得很好)?

【问题讨论】:

  • 既然 PHP 是开源软件,那么在其中包含一些“未记录和很好地隐藏”的东西是无稽之谈。
  • @Techpriester:我知道几十个完全没有文档记录的操作系统项目,而且隐藏得很好也可能是无意的。

标签: php caching header


【解决方案1】:

header_remove() 自 php 5.3 起

header_register_callback() 也即将推出

【讨论】:

  • 酷,谢谢。很可惜,PHP小伙伴们最近才想到这个(毕竟HTTP处理是PHP的核心应用领域)。
  • php 5.3之前的解决方案是什么?我目前有 PHP/5.2.17
  • @Pacerier for php
  • @maliayas。我测试了它。你说的不是真的。浏览器收到一个空白标题。添加空白标题根本不会删除标题!
【解决方案2】:

我知道这个问题已经过时并且已经回答了。但有些答案可能会给人们留下错误的印象。请放心,如果您的响应标头包含 Pragma: no-cache,它实际上绝对会阻止 Web 浏览器缓存资源,而不管其他设置如何。

当然,如果您至少使用 PHP 5.3,您可以使用 header_remove( 'Pragma' ); 删除 Pragma 标头。

【讨论】:

    【解决方案3】:

    您可以通过将第二个参数传递给header() 来覆盖先前设置的标头:

    void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
    

    查看manual for header()

    【讨论】:

    • 我知道,但问题是,如果这足够了,即如果只为 header() 提供 'Pragma:' 会从已发送的列表中删除它。
    • @Boldewyn 不,它不会从已发送列表中删除它。它会以没有值的方式覆盖它,这意味着尽管预期的结果是相同的,但我们发送了不必要的字节,因为我们仍然必须通过网络发送字符串“Pragma:”。
    【解决方案4】:

    规范没有定义“pragma”标头行为 - 尽管普遍认为发送“Pragma: No-cache”标头会对浏览器产生一些影响,事实上它几乎被普遍忽略(并且是我用过的任何 php 安装都没有返回)。

    要告诉浏览器不要缓存内容,可以通过带有过去日期的 expires 标头、带有无缓存值的 Cache-Control 标头或(如果您想偷偷摸摸地)通过 'Varies:日期的标题。如果没有这些类型的标头,客户端不得缓存页面。

    因此,相反,如果您希望页面可缓存,请设置 expires 和 cache-cntrol 标头。

    C.

    【讨论】:

    • 这不能回答问题。问题是关于“在 PHP 中删除标头”而不是关于如何实现缓存。
    • 不 - 这是问题的标题,但是 OP 试图实现的是使内容可缓存 - 删除 pragma 标头与此无关
    • 问题是“如何删除可能已经设置的标题?”
    • 你读的太多了。问题的标题描述了问题。
    • 我认为不再是这种情况了。
    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    相关资源
    最近更新 更多