Ajax调用给我跨域错误

时间:2016-04-29 07:01:38

标签: javascript php angularjs cross-domain

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

  

XMLHttpRequest无法加载http://example.com/dashboard/。没有   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://www.example.com”   访问。

我正在使用PHP角色。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

发生此问题是因为您尚未在服务器端设置访问控制源。您可以通过在服务器端设置

来解决此问题
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *"); 

答案 2 :(得分:0)

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

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

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

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

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

答案 3 :(得分:0)

这是可以预料的。 Same Origin Policy州:

  

如果两个页面的协议,端口(如果指定了一个端口),和主机相同,则两个页面具有相同的来源。

www.example.comexample.com是不同的主机名,因此您可以跨越起源。

虽然口语是指跨域请求,但它是重要的跨域请求;跨域请求只是其中的一部分。

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

使用相对而不是绝对URI也会减少出现这种错误的可能性。