【发布时间】:2011-09-23 09:37:25
【问题描述】:
当我在 Apache + mod_php5 中设置自定义标头时,效果很好:
header('Foo: Bar');
但是当我尝试这个同时同时发送一个 304 Not Modified 响应时,标头似乎已被 apache 删除(以及 X-Powered-By 和其他标准标头)。
header('HTTP/1.1 304 No Content');
header('Foo: Bar');
有谁知道如何解决这个问题?
【问题讨论】:
-
我不太清楚如何阅读这个RFC。难道 Apache 删除了标头以符合 RFC(并帮助缓存管理器)?也许你能理解它?
-
我对 RFC 非常了解,而且它没有施加任何限制。它确实提到了某些标头应该在那里(主要是与缓存相关的标头)。在我的情况下,我需要添加 CORS 标头以进行跨域访问..
-
试试这个而不是 2:
header('Foo: Bar', true, 304);。至于“header似乎被apache删除”——你需要显示你的apache配置(httpd.conf,你的<VistualHost>以及.htaccess——这些说明可以随时随地。 -
LazyOne:尝试使用 header() 语法会导致同样的问题。至于配置,我在 Ubuntu 上使用 100% 默认配置,既不是虚拟主机也不是 .htaccess。我认为值得注意的是,甚至 X-Powered-By 也被删除了。我知道你的名字很懒,但是在你自己的系统上试试,我相信你会看到同样的东西。
-
@Evert
X-Powered-By如果 php.ini 中的expose_php = Off可能根本不会由 PHP 本身发送。至于 304——我重新运行了几个测试(在我最初的评论之后),是的——304 的自定义标头已被删除,但 404 和其他非 3xx 代码存在(使用 302、303、305、306 检查)。必须是特定于 304 的优化(304 = 未修改),其中响应主体必须尽可能小。
标签: php apache http http-headers