Ajax 调用提示跨域错误

Ajax call giving me cross domain error

我刚刚将我的应用程序移至生产服务器,当我尝试使用 "www" 访问该页面时出现错误 当我尝试将我的页面加载为“http://example.com”时,它会正确加载页面和内容,当我尝试访问像 "www.example.com" 这样的页面时,我所有的 ajax 调用都会出现如下错误:

XMLHttpRequest cannot load http://example.com/dashboard/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.example.com' is therefore not allowed access.

我正在使用 PHP 和 angular。

您的网站使用 www 和不使用 www 的方式是否相同?如果不是,也许您可​​以向 htaccess 添加重写规则,这样带有 www 和不带 www 的版本将以相同的方式提供服务?在这种情况下你不应该得到跨域错误

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/ [R=301,L]

出现此问题是因为您没有在服务器端设置访问控制来源。您可以通过在服务器端设置它来解决此问题

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *"); 

当您从浏览器发出请求时,浏览器会在任何一种情况下进行预取(有时不会),它会检查 Access-Control-Allow-Origin 是否真的允许您的客户站点在不同的域上发出请求(网络安全东西)。如果这与您发送请求的位置不匹配,浏览器会阻止该请求并且不会发送它。

要发出请求,您需要编辑服务器端(在 PHP 上),您应该允许该域,它还支持通配符:

<?php
header("Access-Control-Allow-Origin: www.example.com");
?>

现在您可以开始从任何地方发出请求,您还可以将请求限制到特定域,以便只有一个域可以向您发送请求,例如:

header("Access-Control-Allow-Origin: example.com");

这是意料之中的事情。 Same Origin Policy 状态:

Two pages have the same origin if the protocol, port (if one is specified), and host are the same for both pages.

www.example.comexample.com 是不同的主机名,所以你是跨源的。

虽然口语是指跨域请求,但重要的是跨域请求;跨域请求只是其中的一个子集。

不要在多个主机名上托管您的网站,选择一个并坚持使用。 (您可能想要设置从另一个到它的重定向)。

使用相对 URI 而不是绝对 URI 也可以减少此类错误的可能性。