如何配置解决跨域的问题

后台使用PHP编写简单的接口

网上有很多关于如何配置header来解决跨域请求的问题,如下所示:

 1     // 指定允许其他域名访问  
 2     header('Access-Control-Allow-Origin:http://127.0.0.1:8282');  
 3     // 响应类型  
 4     header("Access-Control-Allow-Methods:HEAD,POST,GET,PUT,DELETE,OPTIONS"); 
 5     header("Access-Control-Max-Age:60"); 
 6     header('Access-Control-Allow-Credentials: true');
 7     // 响应头设置  
 8     header('Access-Control-Allow-Headers:x-requested-with,content-type'); 
 9 
10     $res = array("name" => "Echo","age" => 26);
11     
12     echo json_encode($res);
13     return json_encode($res);
14     

关于代码中配置的header,我曾尝试很多次仍没有办法成功,现在针对自己的经验讲解注意问题:

  1. Access-Control-Allow-Origin:http://127.0.0.1:8282或者
    Access-Control-Allow-Origin:*  两者配置都可以,但是要注意的是
    http://127.0.0.1:8282以及*都不需要带上单引号或者双引号!
  2. Access-Control-Allow-Credentials: true  如若配置该项,则在前端请求代码中的头部信息中同样也要配置
    //跨域时,cookie添加到请求中
    $httpProvider.defaults.withCredentials = true;
  3. 在以上配置好后如果遇到预检OPTIONS请求,则不妨试试
    Access-Control-Allow-Headers:x-requested-with,content-type  在options预检后,浏览器会自动重新发送正常的请求,像这样:

    

    

前端代码中在配置url时

url="http://127.0.0.1/study/phpServer/test.php";
一定不要忘记加上http://
如果url=127.0.0.1/study/phpServer/test.php
不然请求地址会在前面加上当前浏览地址:

http://127.0.0.1:8282/127.0.0.1/study/phpServer/test.php
从而请求不到数据

 另外据网上信息提示,如果要在

Access-Control-Allow-Origin处理多个域的话,如下设置
$sorigin = array(  
    'domain1',  
    'domain2'  
);  
  
if(in_array($origin, $origins)){  
    header('Access-Control-Allow-Origin:'.$origin);  
    header('Access-Control-Allow-Methods:POST');  
    header('Access-Control-Allow-Headers:x-requested-with,content-type');  
}  

  但是暂时还没有试验~


原文地址:https://www.cnblogs.com/echo2016/p/5395283.html