
在我的 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 上的以下相關問題: