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


101

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

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

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

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


4
ajaxを読み込みページプロトコルに一致させないのはなぜですか?
scheibk 2009

45
彼らは特に「なぜ私に尋ねないでください」と言った。
Chris Moschini、2011

なぜHTTPSでAJAXが必要なのですか.....
Miles

4
例えば、人々はわずか数より多くの可能性のうちの1つ...何が起こっているのかを見ることができるように、バックグラウンドでのPayPalのような支払いゲートウェイに接続され、より動的なチェックアウトフォームのために
kentor

回答:


58

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

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

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


7
グレート応答-しかし、オペラ(すべてではないで)と(バージョン8以降でサポート)Internet Explorerのようないくつかの使用のブラウザでサポートされていないcaniuse.com/#search=cors
SimonSimCity

1
Operaは今それをサポートしているようです:en.wikipedia.org/wiki/…ただし、Opera Miniのみではありません...
gitaarik

11

JSONPを試してください。

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

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

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


1
hmm私はjsonp: 'jsonp_callback'オプションを設定してjquery .ajaxを試しましたが、それでも同じjsエラーです。
user135863 2009

URLにコールバックパラメータを追加する必要があるかもしれません
Javier

@ user135863クエリを送信するエンドポイントは、そもそもJSONP をサポートしていますか?
Leigh Brenecki 14年

1
私の正気のために、私はあなたの最後のオプションを使用します...単純なリダイレクトhttps:
Dzeimsas Zvirblis

9

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

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


JSONコールバックのデッドリンク:(
Kubie

@Kubieこの回答は明日で10年になります。リンク切れのため、質問に答えるために十分な情報が質問に含まれるようにしています。
ceejayoz

ちょうど10年のhaに気づいた...そしてはい、良い点。大丈夫、これをググって、何か見つけたら答えを編集します
Kubie

4

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

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

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

ただし、Forgeは2つの異なるhttpsドメイン間のリクエストにより適していることを述べておきます。その理由は、潜在的なMiTM攻撃があるためです。安全でないサイトからJavaScriptとFlashをロードすると、危険にさらされる可能性があります。最も安全な使用法は、安全なサイトからロードして、それを使用して他のサイトにアクセスすることです(安全かどうかに関係なく)。


2

httpsページをiframeにロードして、すべてのajaxリクエストを何らかのブリッジ経由でフレームの内外にルーティングしようとすることもできます。これはハックアラウンドですが、機能する可能性があります(安全なコンテキストで同じアクセス制限が課されるかどうかはわかりません)。 。そうでなければ、リクエストを再ルーティングするためのローカルのhttpプロキシ(クロスドメインコールと同様)が受け入れられるソリューションになります。


2
このスレッドを読んだ後は、JSONP dslreports.com/forum/r21425467-IFrame-With-HTTPS-on-HTTP-Page
JGFMK

これは可能ですが、iFrameからのセッションCookieが必要な場合は必ずP3Pヘッダーを設定してください。それ以外の場合、MSEは「nu uh uh」と表示します
srquinn

2

これが私がすることです:

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


これは可能ですが、iFrameからのセッションCookieが必要な場合は、必ずP3Pヘッダーを設定してください。それ以外の場合、MSEは「nu uh uh」と表示します
srquinn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.