当我只是从php文件中回显某些内容时,我没有故意发送任何标头,但是,当我查看firebug响应时,仍然存在一些默认标头:
响应头:
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 23 Jun 2011 19:33:51 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.6-6~dotdeb.1
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip
我很好奇-这些默认响应标头是由服务器(nginx)还是由PHP设置的?
我相信这是两者的结合...您可以说" X-Powered-By:PHP / 5.3.6-6?dotdeb.1"来自PHP,而"服务器:nginx"来自NGINX。
您可以按如下方式更改PHP中的标头:
header("HTTP/1.0 404 Not Found");
?>
gzip标头肯定是来自NGINX,因为它会将输出(html)压缩到浏览器中。通过调用上面的函数,PHP可以"添加"标题。然后,服务器将其与PHP标头组合在一起并提供请求。
PHP头文件是否优先于服务器头文件,这取决于您的服务器。
希望这可以帮助。
多数由nginx设置,例如服务器,日期,内容编码和连接。但是,某些其他标头是由PHP设置的,您可以像这样header("Name: Value");在PHP中添加其他标头
PHP自动设置其中的一些,例如Hello World页面的Content-Type: text/html。 nginx设置与套接字有关的内容,例如Connection: keep-alive。
您将在nginx的配置中找到连接的设置。就内容而言,它是PHP。您可以使用PHP中的header()函数覆盖其中的大部分,并添加自己的自定义标头。
http://php.net/manual/en/function.header.php
例如,如果您打算让PHP发送JSON字符串,则可以将Content-Type设置为application/json。
大多数头由nginx发送。要列出PHP发送的标题(将被使用),请使用功能headers_list:
X-Powered-By标头由php.ini中的Exposure_php指令的值控制:
Decides whether PHP may expose the fact that it is installed on the server (e.g. by adding its signature to the Web server header). It is no security threat in any way, but it makes it possible to determine whether you use PHP on your server or not.
答案中仍然缺少PHP的作用:
某些标头确实是由PHP本身设置的,但是原因并不那么容易找到。这是此处解释的默认会话缓存定界符行为:http://www.php.net/manual/en/function.session-cache-limiter.php
文档中没有的afaik是如何完全关闭它们-只需将一些未定义的值传递给它即可:
开始会话之前,必须先执行此操作。如果您使用的是Zend Framework,则必须在应用程序bootstrap()之前进行设置-否则它将无法正常工作。
您还可以使用header()函数覆盖任何默认服务器头。例如,如果您将PHP header('Server: ')包含在内,则会将Server:标头重置为空白。