因此不允许localhost访问

时间:2014-12-08 05:01:03

标签: php ajax cross-browser cross-domain cors

为解决CORS问题,我在那里写了

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header("Access-Control-Allow-Headers: X-Requested-With"); 

在我的服务器网站

但在我的开发过程中,我发现了这个错误

The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin 'http://localhost' is therefore not allowed access.

我认为允许来源:*会解决所有问题吗?但为什么它说标题包含多个值?

3 个答案:

答案 0 :(得分:3)

当意外地启用两次CORS时,这是一个常见问题。检查以确保您没有在apache中启用它,或者标头没有设置两次。作为完整性检查,您可以尝试删除标题,然后在提交回复之前将其添加回来。

例如:

header_remove('Access-Control-Allow-Origin');
header('Access-Control-Allow-Origin: *');

答案 1 :(得分:1)

由于浏览器安全限制,大多数Ajax请求都遵循相同的原始策略;请求无法从其他域,子域,端口或协议成功检索数据。但是Script和JSONP请求不受相同的源策略限制。

如果您还没有使用过JSONP。维基百科说

  

JSONP或“带填充的JSON”是对基本JSON数据的补充   格式,允许页面请求的使用模式等等   有意义地使用来自主服务器以外的服务器的JSON。

所以你的ajax调用应该是这样的:

$.ajax({
        type: 'GET',
        crossOrigin: true,
        dataType: "jsonp",
        url: url,
        success: function(data) {
            console.log(data);
        }
    });

答案 2 :(得分:1)

使用*将无效。以下PHP代码将接受来自所有域的所有请求,并在IE,Firefox,Chrome和Safari中运行。

$origin=isset($_SERVER['HTTP_ORIGIN'])?$_SERVER['HTTP_ORIGIN']:$_SERVER['HTTP_HOST'];
header('Access-Control-Allow-Origin: '.$origin);        
header('Access-Control-Allow-Methods: POST, OPTIONS, GET, PUT');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Authorization, X-Requested-With');
header('P3P: CP="NON DSP LAW CUR ADM DEV TAI PSA PSD HIS OUR DEL IND UNI PUR COM NAV INT DEM CNT STA POL HEA PRE LOC IVD SAM IVA OTC"');
header('Access-Control-Max-Age: 1');

接受来自所有域的请求是不安全的。有关更好(但稍微复杂一点)的解决方案,请参阅此处:CORS That Works In IE, Firefox, Chrome And Safari