为什么XMLHttpRequest不适用于“www。”?

时间:2012-08-20 13:51:02

标签: javascript jquery ajax redirect

我有以下代码:

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。

的错误

2 个答案:

答案 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的角度来看,您可能希望服务器重定向到网址的一个版本或另一个版本。