在 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 標頭。
原因: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 上的以下相關問題: