当我简单地回复php文件中的内容时,我并没有故意发送任何标题,但是当我查看firebug响应时,无论如何都会出现一些默认标题:
响应标题:
HTTP / 1.1 200 OK
服务器:nginx
日期:2011年6月23日星期四19:33:51 GMT
内容类型:text / html
转移编码:分块
连接:保持活力
变化:接受编码
X-Powered-By:PHP / 5.3.6-6~dotdeb.1
到期日:1981年11月19日星期四08:52:00格林尼治标准时间 缓存控制:无存储,无缓存,必须重新验证,后检查= 0,预检查= 0 Pragma:no-cache
内容编码:gzip
我很好奇 - 这些默认响应标头是由服务器(nginx)还是由PHP设置的?
答案 0 :(得分:7)
我相信它是两者的结合......你可以说“X-Powered-By:PHP / 5.3.6-6~dotdeb.1”来自PHP,“Server:nginx”来自NGINX。
您可以按如下方式更改PHP中的标题:
<?php
header("HTTP/1.0 404 Not Found");
?>
gzip标头绝对来自NGINX,因为它正在将输出(html)压缩到浏览器。 PHP可以通过调用上面的函数来“添加”到头文件中。然后服务器将它与PHP标头组合在一起并提供请求。
取决于您的服务器,PHP标头是否优先于服务器标头。
希望这有帮助。
答案 1 :(得分:3)
大多数是由nginx设置的,例如Server,Date,Content-Encoding和Connection。但是,其他一些标头是由PHP设置的,您可以像PHP header("Name: Value");
答案 2 :(得分:2)
X-Powered-By
标头由php.ini中expose_php指令的值控制:
决定PHP是否可以公开它安装在服务器上的事实(例如,通过将其签名添加到Web服务器头)。它不是任何安全威胁,但它可以确定您是否在服务器上使用PHP。
答案 3 :(得分:2)
大多数标头都是由nginx发送的。要列出PHP发送的标题(使用),请使用函数headers_list
:
<?php
echo htmlentities(print_R(headers_list(), true));
?>
答案 4 :(得分:2)
PHP会自动设置其中一些内容,例如Content-Type: text/html
用于hello world页面。 nginx设置与套接字有关的内容,如Connection: keep-alive
。
您可以在nginx的配置中找到连接的设置。内容方面,它是PHP。您可以使用PHP中的header()
函数覆盖其中的一些,并添加您自己的自定义标头。
http://php.net/manual/en/function.header.php
例如,如果您计划让PHP发送JSON字符串,则可以将Content-Type
设置为application/json
。
答案 5 :(得分:1)
您还可以使用header()
功能覆盖任何默认服务器标头。例如,如果您在PHP header('Server: ')
中包含此项,则会将Server:标头重置为空白。
答案 6 :(得分:1)
答案中仍然缺少的是PHP的作用:
某些标题确实是由PHP本身设置的,但原因并不容易找到。这是此处解释的默认会话缓存分隔符行为:http://www.php.net/manual/en/function.session-cache-limiter.php
文档中没有的是如何完全关闭它们 - 只需将一些未定义的值传递给它:
session_cache_limiter(false);
您必须在开始会话之前执行此操作。如果您使用的是Zend Framework,则必须在应用程序bootstrap()之前设置它 - 否则它将无法工作。