2

tinyproxy をリバース プロキシとして使用してクロス サイト ajax を実行しようとしています。セットアップは次のとおりです。

  • gentoo Linux を実行するデスクトップ システム。IP アドレスは xxxx Boa (Web サーバー、ポート 80) で、tinyproxy (http プロキシ、ポート 8888) がこのシステムで実行されています。

テストファイルは次のとおりです。

======= a.html ======

<html>
  <head>
    <meta charset="UTF-8" />
    <title>Ajax test</title>
  </head>
  <body>
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript" src="a.js"></script>
  </body>
</html>

======= a.js ========

$(document).ready( function() {

    function error_func()
    {
        alert("error occurred");
    }

    function ajax_func(data)
    {
        alert("ajax received");
    }

    $.get("http://x.x.x.x:8888/outside/xyz.txt", ajax_func).error(error_func);

});

http://xxxx:8888/outside/http://www.outside.com/に移動するように tinyproxy を構成しました。私はそのドメインを管理しており、そこに「テスト文字列」を含むテキスト ファイル xyz.txt を配置しました。

ここで、次の URL を firefox に入力すると、xxxx:8888/xyz.txt ですべてが機能し、ブラウザ ウィンドウに「テスト文字列」が表示されます。しかし、xxxx/a.html を firefox に入れると、「エラーが発生しました」というダイアログ ボックスが表示されます。IE、Safari、Firefox、および Chrome でこれを試しましたが、すべてで「エラーが発生しました」というダイアログが表示されます。

私は「同一生成元ポリシー」を認識していることに注意してください。そのため、tinyproxy を使用してその制限を回避しています。

トラフィックを監視するために、gentoo Linux マシンで Wireshark を使用しました。すべてが正常に見えます。firefox と xxxx の間の HTTP トランザクションが表示され、次に xxxx と「外部」の間の HTTP トランザクションが表示され、最後に xxxx と firefox の間の別の HTTP トランザクションが表示されます。HTTP 200 OK には、期待どおり「テスト文字列」が含まれています。それでも、jquery は満足できず、「ajax を受信しました」というダイアログ ボックスが表示されません...

私が疑っているのは、HTTP「サーバー」ヘッダーです。xxxx システムでは「Server: Boa」と表示されますが、最終的な応答には「Server: Apache」と表示されます。この違いにより、同一オリジン ポリシーに違反することになりますか?

4

3 に答える 3

1

Ajax 通信は、次の 3 つの条件の下で行う必要があります。

  1. 同じホスト
  2. 同じプロトコル
  3. 同じポート

したがって、技術的には、異なるポート間で通信するときに Ajax 呼び出しを使用することはできませんが、簡単な解決策があります。別のホスト/プロトコル/ポートからのアクセスを許可する Access-Control-Allow-Origin ヘッダーを定義する場合は、事前に定義された条件を無視できます。

Web ページが正しいヘッダーを介してプロキシにアクセスできることを確認する必要があります。

詳細については、https ://developer.mozilla.org/en-US/docs/HTTP_access_control をお読みになることをお勧めします。

于 2012-09-23T12:55:41.533 に答える
0

同一オリジン ポリシーは、次へのアクセスを制限します。

  • 同じホスト
  • 同じプロトコル
  • 同じポート

x.x.x.x:8888からアクセスしようとするため、同じオリジン ポリシーがケースにも適用されますx.x.x.x:80

同じポート経由でもコンテンツを配信する必要があります。

于 2012-09-23T12:52:15.373 に答える
0

約1か月前、ほぼ同じ質問をしました。ここで答えを見つけることができます: クロス プロトコル Cookie iFrame

于 2012-09-23T12:58:12.567 に答える