私はbar.foo.comにajaxリクエストを行うサイトfoo.comを持っています。これは機能しますか。
また、fooが安全な接続であるhttpsの場合、bar.foo.comもhttpsである必要がありますか?これらの2つのサイトは異なる証明書を使用できますか?
私はbar.foo.comにajaxリクエストを行うサイトfoo.comを持っています。これは機能しますか。
また、fooが安全な接続であるhttpsの場合、bar.foo.comもhttpsである必要がありますか?これらの2つのサイトは異なる証明書を使用できますか?
プレーン http AJAX を使用する場合: クロスドメイン XMLHttpRequest を実行することについて話しているのですが、これはブラウザーでは許可されていません。将来的にこれを安全な方法で実装する保留中のW3C 提案があります (IE8、IIRC によって部分的に実装されています) が、現時点では絶対に不可能です。
ただし、それを安全に行うための回避策があります。サブスペース(iframe と を使用document.domain
)、フラグメント識別子技術(これも iframe を使用)、およびwindow.name
技術(これも iframe です!) です。
SSLに関する限り、ドメインとサブドメイン用に個別の証明書を購入するか、両方をカバーする単一のワイルドカード (*.foo.com) 証明書を購入できます (当然、ワイルドカード証明書はより高価になります)。
他のドメインからのアイテムを要求する HTTPS ページがある場合、すべてが HTTPS である限り、すべて問題ありません。つまり、iframe 回避策のいずれかを使用する場合、iframeの属性でhttps://
スキーム URLを指定する必要があります。src
効率の悪い最終的な回避策は、https://foo.com
リクエストを insecure にプロキシするスクリプトを作成することhttp://bar.foo.com
です。(これは XHR クロスドメインの問題も解決するので、他の回避策は無視してかまいません。) もちろん、これは XHR リクエストを に送信していることを意味しhttps://foo.com/someurl
、それから にヒットhttp://bar.foo.com/someurl
し、レスポンスを受信してブラウザに送り返すので、パフォーマンスに関しては、オプションがある場合は、bar.foo.com のサーバー側機能を foo.com に移動するだけの方がはるかに優れています。ただし、サーバー スクリプトを移動できない場合は、プロキシを使用することをお勧めします。
編集:いくつかの追加テストを行い、iframe AJAX 回避策 (#fragmentidentifier のもの) を取得して、異なる HTTPS ドメイン間で機能するようにした後、最後の 3 つのグラフを変更しました。すべてが iframe で使用され、スキームが使用されている限り、iframe を使用して SSL クロスドメイン AJAX を実行できます。要約:https
https
src
JavaScript TLSとFlashを組み合わせて、安全なクロスドメインリクエストを実行できます。このようにして、訪問者はhttps://foo.comにアクセスし、 https: //bar.foo.comに対してXmlHttpRequestsを作成できます。通常のhttpでも同じことができます。
訪問者のブラウザがfoo.comに対して信頼するSSL証明書を購入する必要がありますが、bar.foo.com、bar2.foo.comなどに対して独自のSSL証明書を生成できます。独自のSSL証明書を生成するよりも高価な代替手段SSL証明書(無料)は、*。foo.comのワイルドカードSSL証明書を購入することです。ただし、foo.comを介してこれらのサイトへのクロスドメインリクエストのみを実行している場合は、その余分な現金を使う必要はありません。
githubでオープンソースのForgeプロジェクトをチェックしてください:
http://github.com/digitalbazaar/forge/blob/master/README
最後のブログリンクは、より詳細な説明を提供します。
ほとんどのブラウザーは、セキュリティ/プライバシー設定に応じて、外部からの呼び出しをブロックし、同じドメインに対して行われた AJAX 呼び出しのみを許可します。共有環境では実際の脅威となる可能性があるため、サブドメインもブロックされます。
要するに、同じドメインを介してのみ AJAX 呼び出しを行う (おそらくページを呼び出し、それが別のドメインから別のページを呼び出す - curl/fopen/... を介して)、そうしないと問題が発生します。これは、SSL に関する質問にも答えます。使用している SSL の種類や同じかどうかは問題ではありません。SSL にもかかわらず、呼び出しはブロックされます。
はい、両方のドメインで異なる証明書を取得できます。それはすべて、構成をどのように決定するかにかかっています。
foo.com 用の Web サーバーを構成し、非セキュア用にポート 80 を開き、セキュア用にポート 443 を開いて、両方を使用することができます。
bar.foo.com 用に別の Web サーバーを構成して、同じポート構成を行うことができます。
両方で安全であることを確認する必要がある場合は、異なるドメインごとに証明書を取得する必要があります。
ある証明書を他のサイトにコピーして使用できるようにする *.foo.com 証明書を購入できる場合があります。
リクエストがhttp://bar.foo.comにリンクしている場合でも、安全な接続は得られません。
Web サーバーにポート 443 を使用して証明書の検証を試みるように指示するには、そこに http"s" が必要です。
すべての証明書が実際に行っていることは、ソースが信頼されているということです。信頼されておらず、http"s" を使用していて、ブラウザがロックされている場合でも、データは暗号化されます。
はい、クロスドメインの ajax 送信を確実に行うことができます。ssl.com ワイルドカード証明書を使用してまったく同じセットアップを行いましたが、2 つのサイトで 2 つの標準証明書を使用できます。
基本的に、JSONP を使用します (yahoo、google、fb などがこれを使用します)。戻り値は関数 amd でラップされ、次のようになります。
someFunction("{...}");