同源策略规范

本文关键字:策略 | 更新日期: 2023-09-27 18:36:51

我有一个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 是从我的服务器传递的。考虑到它的来源来自同一个域(在这种情况下为本地主机),尽管它正在联系另一个域,但浏览器不应该接受它吗?

同源策略规范

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

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

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

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