我有以下代码:
var params = {
cache:false,
dataType:"json",
type:"GET",
url: "/order.php",
error: function(data){
dump(data);
},
success: function (data){
alert('ok');
},
data:{
js:1
}
};
$.ajax(params);
因此,如果我运行example.com,它将完美地完成工作。 但如果我运行www.example.com,我会通过函数dump()收到错误。 Google控制台显示错误:
XMLHttpRequest无法加载 = 1345470451769“> http://example.com/order.php?js = 1& tariff = 247& = 1345470451769。原产地 Access-Control-Allow-Origin
不允许http://www.example.com
这是什么意思?
所以我不需要从www.domain.com到domain.com的任何永久重定向。
提前感谢您的帮助。
更新1: 我添加了功能:
function getBaseUrl()
{
var baseUrl = '';
baseUrl += location.protocol + '//';
baseUrl += location.hostname;
return baseUrl;
}
并在网址上更改网址:“/ order.php”:getBaseUrl()+“/ order.php”
得到了同样的错误。 我在这里做错了吗?
更新2: 我将这个添加到htaccess文件中:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin http://sample.com http://www.sample.com
</IfModule>
似乎我的托管不支持它,因为我仍然收到www。
的错误答案 0 :(得分:4)
您遇到的错误意味着您无法从一个域向另一个域发送XMLHttpRequest
,除非目标域在其响应标头中指定您可以执行此操作。这是浏览器强制执行的安全措施。
整个域名必须匹配,因此example.com无法向www.example.com发出XMLHttpRequest
请求,反之亦然。
您可以使用一些javascript来根据当前文档位置获取URL,或者使用相对路径。
还要确保网络服务器没有从一个域到另一个域进行静默重定向,因为这也可能导致权限问题。
如果您有权访问网络服务器,则可以选择将相应的跨域标头添加到响应中 - http://www.w3.org/TR/cors/
实施例:
Access-Control-Allow-Origin: http://www.example.com http://example.com
编辑:上面列表中的域需要以空格分隔,而不是逗号。
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "http://sample.com http://www.sample.com"
</IfModule>
答案 1 :(得分:2)
子域名被视为same origin policy的其他域名。如果您使用或不使用www站点功能,请使用相对路径。
如果服务器重定向,为什么当前页面不在www?
从SEO的角度来看,您可能希望服务器重定向到网址的一个版本或另一个版本。