0

安全でないページに、jQuery を使用して JSON 投稿をトリガーするログイン リンクがあります。投稿は同じドメインに送信されますが、安全な URL を使用しています。JSON についての私の理解では、JSON ではこのようなクロスドメイン アクションが許可されますが、これは制限である可能性があります。

スクリプトを実行すると、次の JavaScript エラーが発生します。

XMLHttpRequest は https://... を読み込めません。Origin http://.... は Access-Control-Allow-Origin で許可されていません。

私は次のコードを使用していますが、それほど複雑ではありません。

// postURL is something like https://example...
// postData is data to be transmitted
$.getJSON( postURL, postData + "&json=1", function(data) {
    // no error checking yet, just proceed to resultURL
    if ( true ) { window.location = resultURL; }
});

ソースページを安全にロードすると投稿が完全に機能することを確認したので、唯一の問題は https の違いです。

SO でマイニングする似たような質問が半ダースほどありますが、私の状況で機能する答えはありません。たぶん、これは回避できない単なる制限ですか?

4

1 に答える 1

1

コメントで述べたように、Cross Origin (CORS) XMLHttpRequest を作成しようとしています。これは、URI スキームが要求元の一部として定義されているためです。これは可能ですが、接続が許可されていることを検証するために、クライアントとサーバーの両方が特定のヘッダーを相互に渡す必要があります。

発生しているエラーは、CORS XMLHttpRequests を作成できるように、サーバーが正しい応答ヘッダーを送信していないことを意味します。 必要なヘッダーの情報については、W3C 仕様を参照してください。 ほとんどのブラウザーでのサポートに関するより実用的な情報については、この記事を参照してください。

サーバーがサポートしている場合は、jQuery を使用して、getJSON を使用して呼び出す代わりに、 ajax 関数を直接使用して CORS 要求を行うことができます。

もう 1 つのオプションは、JSONPとスクリプト タグ インジェクションを使用するように変更することですが、設定によっては一部のブラウザーでセキュリティ エラーが発生します。

于 2013-08-08T22:30:13.087 に答える