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」と表示されます。この違いにより、同一オリジン ポリシーに違反することになりますか?