我正在使用PHP 5.3和Apache 2.0来提供一个脚本,该脚本会在输出中添加许多标题:
header('HTTP/1.1 200 OK');
header("Content-Type: application/json");
header("Last-Modified: $lastmode"); // $lastmod = Tue, 01 Mar 2011 14:56:22 +0000
header("Etag: $etag"); // Etag = 5da02274fcad09a55f4d74467f66a864
现在,除了Last-Modified
和Etag
之外,所有标题都会出现。在我的httpd.conf中,我有以下内容:
Header unset Cache-Control
Header unset Pragma
但在我的回答中,我得到了:
HTTP/1.1 200 OK
Date: Tue, 01 Mar 2011 16:49:10 GMT
Server: Apache/2.2.14 (EL) mod_ssl/2.2.14 OpenSSL/0.9.8e-fips-rhel5
Keep-Alive: timeout=15, max=8000
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Expires: 0
Cache-Control: no-cache
我的Last-Modified
和Etag
标题已消失,我们已取代Cache-Control
和Expires
。
我还应该提一下,我已禁用mod_expires
无济于事。此时我正在拔头发,因为无论我做什么,标题根本就不存在。什么可能导致他们被删除?
谢谢, Ĵ
更新:似乎Apache在PHP关闭后添加额外的标头,我认为它也删除了我在上面设置的标头。在PHP中注册关闭函数并调用apache_response_headers
会显示:
Pragma=
Expires=
Etag=5da02274fcad09a55f4d74467f66a864
Last-Modified=Tue, 01 Mar 2011 14:56:22 +0000
Keep-Alive=timeout=15, max=8000
Connection=Keep-Alive
Transfer-Encoding=chunked
Content-Type=application/json
答案 0 :(得分:0)
要回答我自己的问题,似乎我用来调试的工具给了我悲伤。是mod_expires模块首先导致问题,但删除它没有影响的原因是我用来调试问题的代理(Charles)似乎修改了标题。一旦查尔斯被带出循环,我的标题就在那里!