Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 因此不允许本地主机访问_Php_Ajax_Cross Browser_Cross Domain_Cors - Fatal编程技术网

Php 因此不允许本地主机访问

Php 因此不允许本地主机访问,php,ajax,cross-browser,cross-domain,cors,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

为了解决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.

我认为允许起源:*会解决一切问题吗?但为什么它说头包含多个值?

这是两次意外启用CORS时的常见问题。检查以确保您没有在apache中启用它,或者头没有被设置两次。作为一个健全的检查,您可以尝试删除标题,并在发出响应之前将其重新添加

例:


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

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

JSONP或“带填充的JSON”是对基本JSON数据的补充 格式,一种允许页面请求和更多内容的使用模式 有意义地从主服务器以外的服务器使用JSON

因此,您的ajax调用应该如下所示:

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

使用*将不起作用。下面的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');

接受来自所有域的请求是不安全的。有关更好(但稍微更复杂)的解决方案,请参见此处:

您能参考一下吗@MIKE1191K那么我的怀疑是正确的。不仅仅是复制粘贴代码:)。它并没有解决问题,它只是清楚地确定了需要修复的内容:)。
$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');