2016-04-19 11 views
2

ドメイン間の問題を解決するのに問題があります。特に、iframe内で外部ドメイン(私たちが管理する)からコンテンツをロードしようとしています。ユーザーがiframeで毎回ログインするのを防ぐため、iframeにユーザーCookieを設定する必要があります。これを行うために、私たちはiframeを作成し、ajax呼び出しでコンテンツを要求し、要求のヘッダーを設定するbeforeSendコールバックを使用しました。外部ドメインへのAjaxリクエストでCookieを設定する

しかし、解決できない問題が発生しています。特にCORSはOPTIONSリクエストを課しているようですが、これを回避する方法はありますか?奇妙なことに、リソースのURLをiframe定義に直接入れると、失敗したOPTIONS要求については不平を言うことはありませんが、通常どおり継続します。これは、Ajaxリクエストまたは単純な$ .get( "...")リクエストを試す場合のみです。

このシナリオではiframe要求を完了させ、ajax呼び出しを許可しないのはなぜですか?

以下

はレスポンスヘッダ

Response Headers access-control-allow-credentials:true access-control-allow-headers:* access-control-allow-methods:PUT, DELETE, POST, GET OPTIONS access-control-allow-origin:* access-control-expose-headers:* connection:keep-alive content-length:2474 content-security-policy: content-type:text/html date:Tue, 19 Apr 2016 10:38:07 GMT server:TornadoServer/4.3

答えて

1

CORSですが、セキュリティ上の理由があります:セキュリティ上の理由から

、ブラウザは、スクリプト内から開始され、クロスオリジンのHTTPリクエスト を制限します。たとえば、XMLHttpRequestは同じオリジンポリシー の後に続きます。したがって、XMLHttpRequest を使用するWebアプリケーションは、独自のドメインに対してのみHTTP要求を作成できます。

XMLHttpRequestはajax呼び出しに使用されており、ブラウザはおそらくそれをブロックしています。

回避策として、サーバー側を制御する場合は、Access-Control-Allow-Originヘッダーを応答に追加して、ブラウザがこのajax呼び出しをブロックしないようにすることができます。

は例えば、PHPにあなたが(あなたのスクリプトの先頭に)行うことができます(私は、一例として、これを使用しているもの、サーバーテクノロジを使用しているかわからない):

header('Access-Control-Allow-Origin: *'); 

かを、

あなたは翔

header('Access-Control-Allow-Origin: http://yourdomain.com'); 

EDIT:あなたのドメインからの呼び出しのみを許可する場合ULD /また、方法は、あなたのCORSヘッダAccess-Control-Allow-Methodsを受け入れる呼んで何をすべきか定義することができます。

header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); 
+0

当社のサーバ側はジャンゴを使用して、我々は竜巻のヘッダー設定を管理している、と我々は必要なヘッダを追加しました。代わりに、コードにオプションエンドポイントを実装する必要があるかもしれないということを405が返すことがわかります。しかし、私たちは設定オプションだけをコードで制御することはできません。 – user1658296

関連する問題