PHP で FPM を有効にした後の CORS の競合

PHP で FPM を有効にした後の CORS の競合

私の Web サーバー上の .htaccess ファイルには、次の CORS ヘッダーが設定されています。

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

ローカルホストから作業中に頻繁に呼び出す PHP スクリプトの 1 つに、次のヘッダーを設定しています。

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').

このエラーは、Web サイトから呼び出しているときではなく、ローカルホストから呼び出しているときにのみ発生します。FPM が有効になっているので、PHP 経由で CORS ヘッダーをオーバーライドする方法があるかどうか知りたいです.htaccess

答え1

理由: CORS ヘッダー「Access-Control-Allow-Origin」が「*, example.com」と一致しません

興味深いことに、それはHeader mergeではなく が呼び出された場合と同じですHeader set。このような「マージされた」値はヘッダーで正式にサポートされていないAllow-Control-Allow-Originため、ブラウザーのサポートは異なる可能性があり、それが機能しない理由を説明します。

.htaccessFPM が有効になったので、PHP 経由で CORS ヘッダーを上書きする方法があるかどうか。

PHP が Apache を上書きするのではなく、Apache が PHP によって設定されたヘッダー (これは以前に設定されています) を上書きしないようにする必要があると思います。setifempty次のアクションを試してください。

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

条件を試すこともできますalways。つまり、Header always set ....これは、デフォルト onsuccessつまり、ヘッダーは実質的に 2 回設定されていることになります。

Access-Control-Allow-Originただし、複数のヘッダーが厳密に標準の一部であるとは考えていないため、ブラウザによって動作が異なる場合があります。

StackOverflow の次の関連質問も参照してください。

関連情報