簡體   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