0

このPythonコードは正常に機能します

print 'foo'
params = {'memberId': '1'}
data = urllib.urlencode(params)
url = 'http://aaa.bbb.com/ccc/'
req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
response = f.read()

print '===>', response

response = eval(response.decode('unicode-escape'))   
f.close()

これに対応するjavascriptコードは何ですか?私はこれを試し、「エラー」を警告しました。現在、私はddd.bbb.comにいます。Webサービスはaaa.bbb.comにあります。このための相対パスを設定できません。

クロスドメインの設定方法を教えてください。ありがとう。

jQuery.ajax({
                        url: 'http://aaa.bbb.com/ccc',
                        type: 'GET',
                        contentType: "application/json",
                        dataType: "json",
                        data: {'memberId':'1'},
                        success: function (data) {
                            alert("ok");
                        },
                        error: function () {
                            alert("error");
                        }
                    });
4

1 に答える 1

1

約 1 兆億 (これは私の技術的な見積もりです ;-)) Javascript の「同一生成元ポリシー」とその回避方法に関する他のスタック オーバーフローの質問があります。それらをチェックすることを強くお勧めします。

簡単にまとめると、基本的なオプションは次のとおりです。

  1. JSONP を使用します (これは、aaa.bbb.com が JSONP をサポートしている場合にのみ機能します)
  2. aaa.bbb.com に ddd.bbb.com を「セーフ リスト」に追加してもらいます (もっと適切な用語がありますが、忘れてしまいました)。あなたが aaa.bbb.com を管理しているなら、これがおそらくあなたの最善の策です
  3. 上記のいずれも実行できない場合は、ddd.bbb.com/someUrl を aaa.bbb.com に転送するプロキシ サービスをセットアップして (Apache だけで処理できます)、ブラウザが自分のドメインにアクセスしていると認識できるようにします。 、しかし実際にはコンテンツは他の場所から来ています。

そして、核心的な問題を理解していただくために、その要点は、セキュリティ上の予防措置として、ブラウザは、evildomain.com からのコードが yourbank.com にアクセスできないようにすることです。ただし、ブラウザーは、オリジンが何であれ、yourbank.com からスクリプトを取得できるようにするため、JSONP と呼ばれるものを使用してそれを悪用できます...ただし、JSONP が機能するには、yourbank.com の所有者がそれをサポートする必要があります (彼らはスクリプトを調整する必要があります)。

yourbank.com が明示的に「evildomain.com が私たちを台無しにするのはいいことだ」と言う場合、ブラウザは yourbank.com にアクセスすることもできます。彼らは、サイトの特別な場所に特別なファイルを置くことによってそれを行います (詳細は忘れましたが、簡単に検索できます)。

これらのいずれも実行できない場合は、evildomain.com サーバーを yourbank.com に移動させることができます。サーバーはブラウザーと同じ制限に縛られていないため、必要なサイトにアクセスできます。その場合、そこで見つけたコンテンツを送り返すことができます。これは「プロキシ」として知られています (evildomain.com を介して yourbank.com に送信されます。これがプロキシ処理の最後です)。

うまくいけば、問題が少し明確になります。

于 2012-12-01T01:26:36.130 に答える