分享

如何配置解决跨域的问题

 WindySky 2016-11-21

后台使用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
从而请求不到数据

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

1
Access-Control-Allow-Origin处理多个域的话,如下设置
1
2
3
4
5
6
7
8
9
10
$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'); 

  但是暂时还没有试验~


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多