我正在尝试使用 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);
});
我已经配置了 tinyproxy,以便http://xxxx:8888/outside/将转到http://www.outside.com/。我控制了那个域,并在那里放置了一个文本文件 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 系统说“服务器:Boa”,但最终的响应是“服务器:Apache”。我会因为这种差异而违反相同的原产地政策吗?