Access-Control-Allow-Origin错误

时间:2015-07-05 07:23:32

标签: javascript ajax cors

我将AJAX调用到与原点相同的域。例如,原点是http://foo.com/folder/index.php,我的AJAX调用中的域将转到http://foo.com/folder/finder.php。所以我的AJAX调用基本上看起来像这样:

var url = "http://foo.com/folder/finder.php?";
request = createRequest();
request.open("GET", url, true);
request.onreadystatechange = confirmCall;
request.send(null);

在这种情况下,finder.php会给我一个目录列表。 request是全局变量。 AJAX调用本身就很完美。

虽然我的计算机上的不同浏览器的CORS问题没有问题,但是其他人得到了典型的CORS Access-Control-Allow-Origin禁止错误。从这个意义上讲,奇怪的是他们并不总是得到这个错误。

请注意:我将大部分相关链接发送到CORS,例如MDM。它们都是指跨域调用,因为这是问题所在。

但是我没有打电话来跨越域名。还是我监督一些事情?请问,任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

由于这似乎解决了这个问题,我会写一个答案来覆盖它,这样你就可以完成这个问题了。

如果您的服务器同时接受http://www.foo.com/folder/index.phphttp://foo.com/folder/index.php(这并不罕见),那么您必须非常小心如何请求Ajax调用,因为如果有人将http://www.foo.com/folder/index.php键入浏览器栏,这是用于网页的URL,但随后您的Ajax请求转到http://foo.com/folder/finder.php,然后浏览器会抱怨http://foo.comhttp://www.foo.com的来源不同,并且因跨域安全原因拒绝进行Ajax调用。

有几种方法可以解决这个问题。首先,您可以通过自动重定向http://foo.comhttp://www.foo.com来修复服务器端,以便所有Ajax请求都来自http://www.foo.com,然后在您的Ajax URL中使用该域。

或者,在客户端,您可以将所有URL设置为域相关,以便它们自动使用网页使用的任何域。因此,您可以使用http://foo.com/folder/finder.php?,而不是以/folder/finder.php?请求您的Ajax网址。浏览器将自动使用加载网页的相同域,因此没有跨域问题。

相关问题