シナリオ:
- ExtJS に基づくフロントエンド アプリケーションをホストする Web サーバー。
- バックエンド サービスをホストする ColdFusion 10 サーバー (Apache を使用)。
- フロントエンド アプリケーションは、フォームを使用して ColdFusion コンポーネント (CFC) に AJAX リクエストを作成します。
http://<CF_server>/<app_path>/<CFC>?method=someMethod&...
- CFC は JSON で応答します。
フロントエンドとバックエンドは異なるサーバー上にあるため、CORS (Cross-Origin Resource Sharing) 環境にあり、AJAX リクエストはバックエンドに 2 つの http リクエストを作成します。1 つ目はハンドシェイクの OPTIONS メソッドで、2 つ目は POST リクエストです。CF サーバー上の Apache でヘッダーを有効にし、CORS を有効にするために「Header set Access-Control-Allow-Origin: *」ディレクティブを使用する必要がありますが、Apache ではなく CF からプログラムでヘッダーを処理したいと考えています。いくつかのテストを実行したところ、http 要求の OPTIONS メソッドは CFM でのみ機能し、CFC では機能しないことに気付きました。したがって、最初の AJAX 要求 (OPTIONS メソッドを使用) は失敗します。useDefaultXhrHeader プロパティを設定する AJAX 呼び出しで OPTIONS 要求をバイパスできますが、CF の動作は理解できます。
cfhttp タグを使用してテストを実行した後、次のことがわかりました。
- OPTIONS メソッドを使用した CFM への HTTP リクエストは、GET メソッドに似ています。Application.cfc でイベント メソッド (または RequestStart など) をトリガーし、ファイルの内容とヘッダーを返します。
- CFC への OPTIONS メソッドを使用した HTTP リクエストは、イベントをトリガーせず、filecontent もヘッダーも返しません。
- 存在しない CFC を (OPTSIONS メソッドで) 呼び出すと、同じ結果が返されます。
CFCを呼び出すときにCFがOPTIONSメソッドを処理しないのはなぜですか?
私のテストでは、ポート 8500 で統合 CF Web サーバーを使用して Apache をバイパスしました。CF9 でも同じ結果を試しました。代わりに、Railo の動作は異なります。CFC の OPTIONS メソッドも処理します。
これは、応答のないこのスレッドに似ています: http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:59715
ありがとう。