0

我对在我的服务器上运行的代码背后的函数进行了 javascript AJAX 调用,该函数返回到客户端脚本(已启动调用)、带有查询的 url(来自与我不同的域)(http://www .web_server_url.com/my_query&callback= ?)。返回调用后,将执行以下 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 是从我的服务器传递的。考虑到它的来源来自同一个域(在这种情况下为本地主机),尽管它正在联系另一个域,但它不应该被浏览器接受吗?

4

1 回答 1

1

同源意味着请求的资源/信息必须与页面位于同一域(模式 + 主机 + 端口)上。这并不意味着“源服务器提供的资源的 URL”。

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

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

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

于 2013-10-25T16:22:16.727 回答