3

シナリオ:

  • 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

ありがとう。

4

1 に答える 1