在 PHP 中啟用 FPM 後發生 CORS 衝突

在 PHP 中啟用 FPM 後發生 CORS 衝突

在我的 Web 伺服器上的 .htaccess 檔案中,我設定了以下 CORS 標頭:

Header set Access-Control-Allow-Origin "example.com"

在我從本機工作時經常呼叫的 PHP 腳本之一中,我設定了以下標頭:

header("Access-Control-Allow-Origin: *");

直到昨天,當我為 PHP 打開 FPM 時,這對我來說一直有效。現在我收到以下錯誤:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.example.com/script.php. (Reason: CORS header 'Access-Control-Allow-Origin' does not match '*, example.com').

我僅在從本機主機呼叫時收到該錯誤,而不是從網站呼叫時收到該錯誤。我想知道.htaccess既然啟用了 FPM,是否有辦法透過 PHP 覆蓋CORS 標頭。

答案1

原因:CORS 標頭「Access-Control-Allow-Origin」與「*, example.com」不匹配

奇怪的是,這就像Header merge被稱為,而不是Header set?像這樣的「合併」值不受標Allow-Control-Allow-Origin頭正式支持,因此瀏覽器支援可能會有所不同,並將解釋為什麼它不適合您。

.htaccess既然啟用了 FPM,是否有辦法透過 PHP 覆蓋CORS 標頭。

我認為您需要嘗試使 Apache 不會覆蓋 PHP 設定的標頭(這是先前設定的),而不是 PHP 覆蓋 Apache。試試setifempty動作:

Header setifempty Access-Control-Allow-Origin "example.com"

您也可以嘗試一下always條件,即。Header always set ....- 這是一個不同的標題“組”預設 onsuccess並且應該意味著標頭被有效設定兩次。

但是,我也不認為多個Access-Control-Allow-Origin標頭嚴格是標準的一部分,因此瀏覽器的行為可能會有所不同。

另請參閱 StackOverflow 上的以下相關問題:

相關內容