这些额外的HTTP头从哪里来



当我只是从php文件中回显某个内容时,我不会故意发送任何标头,但是,当我查看firebug响应时,仍然存在一些默认标头:

响应标头:

HTTP/1.1 200正常
服务器:nginx
日期:2011年6月23日星期四19:33:51 GMT
内容类型:text/html/
传输编码:分块
连接:保持活动
Vary:接受编码
X-Powered-Bor:PHP/5.3.6-6~dotdeb.1
有效期至:1981年11月19日星期四08:52:00 GMT
缓存控制:无存储,无缓存,必须重新验证,后检查=0,预检查=0
Pragma:没有缓存
内容编码:gzip

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

我相信这是两者的结合。。。可以看出"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头是否优先于服务器头取决于您的服务器。

希望这能有所帮助。

大多数由nginx设置,例如服务器、日期、内容编码和连接。然而,其他一些标头是由PHP设置的,您可以在PHP中添加其他标头,如header("Name: Value");

X-Powered-By标头由php.ini中expose.php指令的值控制:

决定PHP是否可以公开它安装在服务器上的事实(例如,通过将其签名添加到Web服务器标头)。它在任何方面都没有安全威胁,但它可以确定您是否在服务器上使用PHP。

大多数头文件都是由nginx发送的。要列出PHP发送的头,请使用函数headers_list:

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

PHP会自动设置其中一些,比如helloworld页面的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

答案中仍然缺少PHP:的作用

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

文档中没有的问题是如何完全关闭它们——只需传递一些未定义的值:

session_cache_limiter(false);

您必须在开始会话之前完成此操作。如果您使用的是Zend Framework,则必须在应用程序引导()之前设置它,否则它将无法工作。

您还可以使用header()函数覆盖任何默认的服务器头。例如,如果在PHP header('Server: ')中包含,则会将Server:标头重置为空。

相关内容

  • 没有找到相关文章

最新更新