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

关于 Javascript 的“同源策略”以及如何解决它,大约有 1 万亿(这是我的技术估计 ;-))其他 Stack Overflow 问题。我强烈建议检查一下。

作为一个快速总结,您的基本选项是:

  1. 使用 JSONP(仅当 aaa.bbb.com 支持 JSONP 时才有效)
  2. 让 aaa.bbb.com 将 ddd.bbb.com 添加到它的“安全列表”中(有一个更好的术语,但我忘记了);如果您控制 aaa.bbb.com,这可能是您最好的选择
  3. 如果您不能执行上述任何一项,请设置代理服务(仅 Apache 可以处理)将 ddd.bbb.com/someUrl 转发到 aaa.bbb.com,以便浏览器认为您正在访问自己的域,但实际上内容来自其他地方。

只是为了让您了解核心问题,其要点是浏览器不会让 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 回答