簡體   English   中英

php沒有獲得自定義標頭(Apache 2.4 + FPM / FastCGI php 7)

[英]php is not getting custom headers (Apache 2.4 + FPM/FastCGI php 7)

我嘗試使用apache_request_headers(),$ _ SERVER,$ _ ENV和getallheaders()獲取所有標頭。

我知道Apache 2.4出於安全原因會丟棄未知的標頭,並嘗試通過添加以下內容來規避它:

SetEnvIfNoCase ^X (.*) HTTP_CUSTOM=$0
RequestHeader set HTTP_CUSTOM %{HTTP_CUSTOM}e env=HTTP_CUSTOM

它成功捕獲/重命名了已知的標頭,但是當嘗試捕獲X-Custom-Header時,它始終為空。

可能是什么原因?

因此,我實際上不確定您要做什么。

如果您嘗試從請求到響應中添加以X開頭的標頭,那么我將在您的htaccess文件中使用它。

Header echo ^X

如果您嘗試在PHP腳本中使用標頭值,則標頭值應位於$_SERVER數組中,但名稱已標准化。 例如

X-Custom-Header: blah
X-Na-Bra: true

可以從訪問

<?php 
   // note that headers are prefixed with "HTTP" and "-" and changed to "_"
   echo $_SERVER['HTTP_X_CUSTOM_HEADER'];
   echo $_SERVER['HTTP_X_NA_BRA'];

  // either way you should be able to find them with a print_r($_SERVER);
  // print_r(getallheaders()); should show the headers without normalized names
  $tempArray = getallheaders();
  echo $tempArray['X-Custom-Header'];
?>

聽起來好像您想從以X開頭的動態標頭中獲取值。如果是這種情況,則您的代碼將無法正常工作。 您的代碼(如果有效)將始終包含以X開頭的標頭的最后一個值。因此,如果您有多個以X開頭的標頭,那么您將缺少值。 使用代碼,您需要為要傳遞給PHP腳本的每個標頭創建一個規則,這聽起來很痛苦。

如果我缺少某些內容,請在下面評論,然后我將更新此答案。

暫無
暫無

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

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