5

2 つのドメイン (ドメイン A、ドメイン B) があります。

ドメイン A には ZF2 アプリケーションが配置されており、すべて問題ありません。

ドメイン B には、ランディング ページ (データを収集するためのフォームを備えた小さなサイト) が配置されます。

ランディング ページから、フォーム データをドメイン A のアプリケーションに送信します (AJAX リクエスト)。

残念ながら、ドメイン A の ZF2 アプリはデータを受信せず、結果を表示しませんでした。ZF2アプリと同じドメインからAJAXリクエストを作成すると、すべて問題ありません。

JSONP を使用しようとしましたが、成功しませんでした。

これを強制的に機能させる方法は他にありません。

4

3 に答える 3

7

Bodgan の回答が述べているように、これは ZF2 の問題ではなく、ブラウザのセキュリティの問題です。これを回避する一般的な方法の 1 つは、ドメイン A の を変更してACCESS-CONTROL-ALLOW-ORIGIN、ドメイン B からのリクエストを許可することです。これおよびその他の解決策については、Mozilla Developer Network (MDN) のHTTP アクセス コントロール (CORS)のページで説明されています。

基本的に、リソースのリクエストに応答してもよいことを受信サーバー (ドメイン A) に示す必要があります。これは、ドメイン A の Web ルートに配置されたファイル内で実行でき.htaccessます。以下は、すべてのドメインからのリソース共有リクエストに応答する必要があることをドメイン A に示す簡単なサンプル コードです*。上記にリンクされている MDN の記事では、「クロスオリジン リソース共有 (CORS)」の詳細について説明しています。セキュリティへの影響があることに注意してください。ほとんどのシナリオでは、*オリジンからのリクエストに対してサーバーを開放するのではなく、自分で制御する特定のホストに対してサーバーを開放する必要があります。

Options +FollowSymlinks
RewriteEngine on

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
于 2012-11-28T22:39:42.477 に答える
0

htaccess ファイルをサポートに変更することもできますが、最も簡単な方法は応答クラスを使用することです。

$this->_response->setHeader('Access-Control-Allow-Origin', '*');

http://framework.zend.com/manual/2.0/en/modules/zend.http.response.html

json をエンドポイント データ ソースとして使用している場合は、これを json ヘルパーと組み合わせて使用​​します。これにより、エンコード ヘッダーやその他の設定もいくつか設定されます。

$this->_helper->json->sendJson($jsonIsite);

http://framework.zend.com/manual/2.0/en/modules/zend.json.introduction.html

ZF2 を使用した高度な CORSにはhttps://github.com/zf-fr/zfr-corsがありますが、上記の単純な json エンドポイントは問題なく動作するはずです。

于 2015-01-06T01:08:13.293 に答える
-1

セキュリティ上の理由から、クロスドメインの ajax リクエストは禁止されています (これは同一オリジン ポリシーと呼ばれます)。 http://en.wikipedia.org/wiki/Same_origin_policy

于 2012-11-28T16:43:58.567 に答える