同源政策规范

时间:2013-10-25 16:17:35

标签: c# javascript jquery

我对我的服务器上运行的函数后面的代码进行了javascript AJAX调用,该代码返回到客户端脚本(已启动调用),一个url(来自与我不同的域)并带有查询({{ 3}}?)。返回调用后,执行以下JQuery代码('specific_div'是页面中的现有div):

$('#specific_div').load(returned_url);

与此同时,我收到以下错误消息:

XMLHttpRequest cannot load http://www.web_server_url.com/my_query&callback=?. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

虽然我理解同源策略,但我不太明白为什么我在这种情况下获取此错误消息,因为url是从我的服务器传递的。考虑到它的来源是来自同一个域(在这种情况下是本地主机),虽然它正在联系另一个域,但它不应该被浏览器接受吗?

1 个答案:

答案 0 :(得分:1)

相同来源意味着请求的资源/信息必须与页面位于同一个域(架构+主机+端口)上。它并不意味着“由原始服务器提供的资源的URL”。

在您的特定情况下,您有"http://localhost"上的页面并尝试请求"http://www.web_server_url.com" - scheme(“http”)和端口(80)匹配,但域名不匹配(“localhost”vs. “www.web_server_url.com”)。

请注意,您看到的错误说明您需要在目标服务器上为此特定请求启用CORS

如果您不拥有/控制目标服务器(因此无法使用CORS或JSONP与其他服务器客户端进行安全通信),那么大多数通用选项都是您服务器上的请求代理。请注意,您可以使用哪些信息的限制(即您不能以这种方式窃取在目标域上设置的cookie)。