web-dev-qa-db-ja.com

httpページでhttpsを使用するAjax

私のサイトはhttpおよびhttpsプロトコルを使用しています。コンテンツには影響しません。私のサイトはjQuery ajax呼び出しを使用しており、ページ上のいくつかの領域も埋めています。

次に、すべてのajax呼び出しをhttps経由で行いたいと思います。 (理由を聞かないでください:))httpsプロトコルを使用しているページでは、ajaxリクエストが機能しています。 httpプロトコルのページにいるとき、javascriptエラーが表示されます:制限されたURIへのアクセスが拒否されました

これはクロスドメインの問題であり(実際、クロスプロトコルの問題である)、Ajax呼び出しで現在のページと同じプロトコルを使用する必要があることを知っています。

それでも、私はすべてのajax呼び出しをhttpsにし、http経由で提供されたページで呼び出します。これを達成するための回避策はありますか(json/proxyソリューション?)、または単に不可能ですか?

98
user135863

サーバーからAccess-Control-Allow-Originヘッダーを追加します

Access-Control-Allow-Origin: https://www.mysite.com

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

57
DalSoft

JSONPを試してください。

ほとんどのJSライブラリは、他のAJAX呼び出しと同じくらい簡単ですが、内部的にはiframeを使用してクエリを実行します。

ペイロードにJSONを使用していない場合は、iframeの周りに独自のメカニズムを展開する必要があります。

個人的には、http://ページからhttps://ページにリダイレクトするだけです

11
Javier

http://example.com/ は、 https://example.com/ (Hostヘッダーが送信されないため、そのIPのデフォルト)、2つは別々のドメインとして扱われるため、クロスドメインJS制限の対象となります。

JSONコールバック を使用すると、これを回避できます。

8
ceejayoz

オープンソースのForgeプロジェクトを調べてください。 JavaScript TLS実装と、実際のクロスドメインリクエストを処理するFlashを提供します。

http://github.com/digitalbazaar/forge/blob/master/README

要するに、Forgeを使用すると、http経由でhttpsサイトにロードされたWebページからXmlHttpRequestsを作成できます。クロスドメインリクエストを有効にするには、サーバーを介してFlashクロスドメインポリシーファイルを提供する必要があります。 README=の最後にあるブログ投稿をチェックして、どのように機能するかの詳細な説明を取得してください。

ただし、Forgeは2つの異なるhttpsドメイン間のリクエストにより適していることを言及する必要があります。その理由は、MiTM攻撃の可能性があるからです。安全でないサイトからJavaScriptとFlashをロードすると、侵害される可能性があります。最も安全な使用法は、安全なサイトからそれをロードし、それを使用して他のサイトにアクセスすることです(安全またはその他)。

4
dlongley

Iframeでhttpsページをロードし、すべてのAjaxリクエストを何らかのブリッジ経由でフレームの内外にルーティングすることを試みることができます。 。それ以外の場合、リクエストを再ルーティングするローカルHTTPプロキシ(クロスドメインコールなど)が受け入れられるソリューションになります。

2

ここに私がやることがあります:

投稿するデータを使用して非表示のiFrameを生成します。そのiFrameを引き続き制御するため、同じOriginは適用されません。次に、そのiFrameのフォームをsslページに送信します。 sslページは、ステータスメッセージを含む非sslページにリダイレクトします。 iFrameにアクセスできます。

2
kjv