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.com
和 example.com
是不同的主机名,所以你是跨源的。
虽然口语是指跨域请求,但重要的是跨域请求;跨域请求只是其中的一个子集。
不要在多个主机名上托管您的网站,选择一个并坚持使用。 (您可能想要设置从另一个到它的重定向)。
使用相对 URI 而不是绝对 URI 也可以减少此类错误的可能性。
我刚刚将我的应用程序移至生产服务器,当我尝试使用 "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.com
和 example.com
是不同的主机名,所以你是跨源的。
虽然口语是指跨域请求,但重要的是跨域请求;跨域请求只是其中的一个子集。
不要在多个主机名上托管您的网站,选择一个并坚持使用。 (您可能想要设置从另一个到它的重定向)。
使用相对 URI 而不是绝对 URI 也可以减少此类错误的可能性。