簡體   English   中英

PHP 如何使用 header() 函數設置 HTTP 標頭?

[英]How does PHP set HTTP headers with the header() function?

我正在學習 HTTP 和 Web 編程,我驚訝地發現您可以使用 php 設置 HTTP 標頭。 我認為 PHP 用於生成動態 HTML 網頁和創建應用程序。 PHP 可以設置由 Web 服務器(例如 Apache)發送的標頭對我來說似乎很奇怪。 我知道 PHP 解釋器讀取 PHP 文件並通常以 HTML 的形式生成輸出。

這個過程是否適用於管道? 在我看來,apache 服務器必須能夠從 PHP 解釋器接收命令,或者它必須能夠自己解釋 PHP 函數。 我認為它們是單獨的過程。

PHP 使用什么機制來設置 Web 服務器應用程序的標頭(httpd 或 Apache 或其他)

是否所有 Web 服務器都支持接收和設置通過 PHP 接收的標頭?

是否可以使用所有后端語言設置 HTTP 標頭?

我搜索了網站,但沒有找到我的問題的答案。

更具體地說,我想知道 apache 或其他 Web 服務器可以向 PHP.exe 應用程序或 PHP-CGI.exe 應用程序發送什么命令來接收除輸出的 HTML 文件之外的其他信息。

確實是個有趣的問題。 使用命令行工具,我只能訪問生成的 HTML 輸出。 因此php -r"header('Location: http://someurl.com');" 不會從命令行產生任何東西。

但是,當我使用 IIS(不是 Apache)查看我的設置時,我發現 IIS 正在使用 PHP-CGI.exe 與 PHP 進行通信。 查看 PHP-CGI.exe 的可選參數,我看到-b可用於設置Bind Path for external FASTCGI Server modeBind Path for external FASTCGI Server mode 我猜在這種服務器模式下,將有空間來傳達與生成的 HTML 分開的標頭信息。

我不知道更深入的 FASTCGI 協議的確切細節。 但我想這就是你想知道的。

編輯:

在谷歌搜索時,我發現了這個線程: PHP 如何與 Apache 交互?

從 PHP 發送標頭非常有用,例如,您可以發送標頭來強制瀏覽器下載文件而不是在屏幕上顯示它(對於文件腳本、輸出 CSV 的報告)、控制緩存標頭和執行頁面重定向。

正如其中一條評論所述,PHP 在許多安裝中都是 Apache 的一個模塊,它直接通過它發送標頭。 否則,標頭將通過 CGI / FastCGI 或 PHP-FPM 發送給 nginx。

您或多或少想到的是模板引擎,PHP 在該引擎上表現良好,但 PHP 具有模板引擎中通常看不到的其他功能,例如打開套接字、處理文件等。

我使用過的任何后端語言都支持發送 HTTP 標頭,如果沒有這種能力,我認為任何面向 Web 的后端語言都是不完整的。

header('位置: http : //www.google.com/ ');

這樣我們就可以在php中設置header

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM