繁体   English   中英

这些额外的HTTP标头来自哪里?

[英]Where are these extra HTTP headers coming from?

当我简单地用php文件回显一些内容时,我不会故意发送任何标题,但是当我查看firebug响应时,无论如何都会出现一些默认标题:

响应标头:

HTTP / 1.1 200好的
服务器: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 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设置的,例如Server,Date,Content-Encoding和Connection。 但是,其他一些标题是由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会自动设置其中一些Content-Type: text/html ,例如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

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

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

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

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

session_cache_limiter(false);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM