FXMで「No 'Access-Control-Allow-Origin' header is present on the requested resource」エラーが発生します


解説

以下の節に列挙されている状況下で、Federated Experience Manager (FXM) ビーコン スクリプトのAJAX要求が失敗します。事象が発生した場合、ブラウザ コンソールで、以下のエラーを確認することができます:

XMLHttpRequest cannot load http://your.domain.com/sitecore/api/ssc/Beacon... 
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://your.domain.com' is therefore not allowed access.

この事象は、Federated Experience Manager (FXM)バージョン8.0 Initial Release以降で発生します。本事象は、以下の原因により発生する可能性があります。

原因1

initializeパイプラインのServicesWebApiInitializerプロセッサーがまだ実行されていないタイミングで、以下の関数がカスタム コードから呼び出された場合。

GlobalConfiguration.Configure(WebApiConfig.Register);

これは例えば、Global.asaxファイルのApplication_Start()メソッドや、ServicesWebApiInitializerプロセッサーの前に配置されたカスタムのinitializeパイプラインのプロセッサーで呼び出される場合があります。また、これがアプリケーションの初期化へのサブスクリプションを許可するサード パーティのライブラリである場合もあります。例えば、WebActivatorExライブラリは、PreApplicationStartMethod属性で初期化メソッドを特定することができます。

解決策1

この事象を解決するには:

  1. コードまたはサード パーティ コンポーネントでGlobalConfiguration.Configure()メソッドを呼び出す場所を検索します。
  2. この場所の前に以下のコードを挿入し、変更をコンパイルしてサイトにデプロイします:
    GlobalConfiguration.Configuration.EnableCors();

原因2

IISまたはweb.configファイルでリダイレクトが(例えば、URL Rewrite IISモジュールを使用するなどして)設定されている場合。AJAX Beaconの要求がリダイレクトされると、CORSヘッダが消失し、この問題が発生します。

解決策2

この事象を解決するには:

原因3

Sitecore XPソリューションがAzure Web Appsでホストされている場合、この事象はApp Serviceレベルで設定されたCORSヘッダに起因する可能性があります。Azure App ServiceがカスタムのCORSヘッダを設定するように構成されている場合、FXMコードが設定したCORSヘッダが上書きされることになります。

解決策3

この問題を解決するには: