2011-06-23 26 views
11

当我简单地echo出来的东西php文件,我不发送任何头故意,但 - 有一些默认的头现在反正当我看着萤火虫的反应:这些额外的HTTP标头来自哪里?

响应头:

HTTP /1.1 200 OK
服务器:nginx
日期:星期四,2011年6月23日19时33分51秒GMT
的Content-Type:text/html的
传输编码:分块
连接:保持活跃
有所不同:接受编码
X-已启动方式:PHP/5.3.6-6〜dotdeb.1
到期日:星期四,1981年11月19日8时52分00秒GMT
缓存控制:无店,无缓存,必重新验证,检查后= 0,预检查= 0
杂注:无缓存
内容编码:gzip

我很好奇 - 这些都是默认响应头由服务器(nginx)还是由PHP设置?

回答

7

添加其他我相信这是两者的结合。你可以告诉大家,“X-已启动方式:PHP/5.3。 6-6〜dotdeb.1“来自PHP,”Server:nginx“来自NGINX。

可以改变PHP的标题如下:

<?php 
    header("HTTP/1.0 404 Not Found"); 
?> 

的gzip头,因为它是压缩输出(HTML)浏览器最肯定来自NGINX。通过调用上面的函数,PHP可以“添加”到标头。然后服务器将它与PHP头结合起来并提供请求。

这取决于你的服务器上的PHP头是否优先于服务器头。

希望这会有所帮助。

3

大部分由nginx的设置,例如,服务器,日期,内容编码,和连接。然而,其他一些报头由PHP设置,并且可以用PHP这样header("Name: Value");

2

X-Powered-By头由expose_php指令的值在php.ini控制:

决定是否暴露PHP,它是安装在服务器上的事实(例如,加上其签名到Web服务器头)。它没有任何安全威胁,但它可以确定您是否在服务器上使用PHP。

2

大多头被nginx的发送。要列出标题(要)通过PHP发送,使用功能headers_list

<?php 
echo htmlentities(print_R(headers_list(), true)); 
?> 
2

PHP自动将其中的一些,像Content-Type: text/html为世界你好页面。 nginx设置了与套接字有关的那些,如Connection: keep-alive

你会发现在nginx的的配置连接设置。内容方面,它是PHP。你允许占优不少人在PHP中header()功能,以及添加自己的自定义页眉。 http://php.net/manual/en/function.header.php

例如,你可以设置Content-Typeapplication/json,如果你打算让PHP发送一个JSON字符串。

1

您也可以覆盖任何使用header()功能默认服务器头。例如,如果你在你的PHP包括header('Server: ')这将重置服务器:标题是空白。

1

什么仍然在答案缺少的是PHP的作用:

部分标题确实是由PHP本身设定,但原因不是那么容易找到。这是默认的会话缓存分隔符的行为解释在这里:http://www.php.net/manual/en/function.session-cache-limiter.php

什么AFAIK不是在文档是如何彻底关闭 - 简单一些不确定的值传递给它:

session_cache_limiter(false); 

你必须在做这个你开始你的会议。如果您使用的是Zend框架,你必须设置这个应用程序引导前() - 否则将无法正常工作。