gpt4 book ai didi

jquery - 使用代理的跨站点 ajax 不起作用

转载 作者:行者123 更新时间:2023-12-01 04:58:24 25 4
gpt4 key购买 nike

我正在尝试使用tinyproxy作为反向代理来进行跨站点ajax。设置如下:

  • 运行 gentoo Linux 的桌面系统。 IP 地址是 x.x.x.x。 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://x.x.x.x:8888/outside/将转到http://www.outside.com/ 。我控制该域,并在那里放置了一个文本文件 xyz.txt,其中包含“测试字符串”。

现在,当我将以下网址放入 Firefox 中时:x.x.x.x:8888/xyz.txt,一切正常,我看到浏览器窗口中显示“测试字符串”。但是当我将 x.x.x.x/a.html 放入 firefox 时,出现“发生错误”对话框。我已经在 IE、Safari、Firefox 和 Chrome 上尝试过此操作,并且在所有这些浏览器中都出现“发生错误”对话框。

请注意,我了解“同源策略”,这就是我使用tinyproxy来绕过该限制的原因。

我在gentoo linux机器上使用wireshark来观察流量。一切看起来都很好。我看到 Firefox 和 x.x.x.x 之间的 HTTP 事务,然后看到 x.x.x.x 和“外部”之间的 HTTP 事务,最后看到 x.x.x.x 和 Firefox 之间的另一个 HTTP 事务。 HTTP 200 OK 包含预期的“测试字符串”。但是,jquery 仍然不高兴,我没有收到“ajax 已收到”对话框...

我怀疑的一件事是 HTTP“Server” header 。 x.x.x.x 系统显示“Server: Boa”,但最终响应为“Server: Apache”。我是否会因为这种差异而违反同源政策?

最佳答案

Ajax 通信必须在以下三个条件下进行:

  1. 同一主机
  2. 相同协议(protocol)
  3. 相同端口

所以从技术上讲,在不同端口之间通信时不能使用 Ajax 调用,但有一个简单的解决方案。如果您定义了 Access-Control-Allow-Origin header ,允许您从其他主机/协议(protocol)/端口获取访问权限,则可以忽略预设条件。

您必须确保您的网页可以通过正确的 header 访问您的代理。

有关更多信息,我建议您阅读以下内容:https://developer.mozilla.org/en-US/docs/HTTP_access_control

关于jquery - 使用代理的跨站点 ajax 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com