Php

在 PHP 中啟用 FPM 後 CORS 衝突

  • January 12, 2021

在我的 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 標頭。

原因:CORS 標頭 ‘Access-Control-Allow-Origin’ 不匹配 ‘*, example.com’

好奇,這好像Header merge被呼叫了,而不是Header set?像這樣的“合併”值不受Allow-Control-Allow-Origin標頭官方支持,因此瀏覽器支持可能會有所不同,並會解釋為什麼它不適合您。

如果啟用了 FPM,是否有辦法.htaccess通過 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 上的以下相關問題:

引用自:https://serverfault.com/questions/1049472