• php:跨域


    一个没那么难的历史难题,其实只要在被请求端,加一句:

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

    然后……然后没有了。

    //跨域访问的时候才会存在此字段
    $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';  
       
    $allow_origin = array(  
        'http://www.a.com',  
        'http://www.b.com' 
    );  
       
    if(in_array($origin, $allow_origin)){  
        header('Access-Control-Allow-Origin:'.$origin);  
        header('Access-Control-Allow-Methods:POST');  
        header('Access-Control-Allow-Headers:x-requested-with,content-type');  
    } 
    

      

    因工作需要,客户端软件的一些界面用HTML+CSS+Javascript实现,这些文件放在客户端本地,以本地文件形式加载,但是有些情况下,需要连接服务器取得一些信息,如果不做任何处理,则请求失败,返回的信息如下:

    No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
    

      

    这是因为浏览器跨域策略起作用,阻止了跨域的请求。看看HTTP请求过程就知道。第一次请求后端时候,浏览器意识到是访问一个跨与资源,没有直接发送GET请求获取数据,而是发送了一个OPTIONS请求询问是否可以访问该资源。我们称之为Preflight请求,默认因为同源策略的存在,该请求返回的Header中没有'Access-Control-Allow-Origin'属性,所以访问失败。
    如果要实现跨域,关键在于服务器,客户端的代码按照正常的方式编写即可。对于服务器,只需要在收到OPTIONS请求的地方,返回的头信息中增加该属性即可,代码如下:

    header("Access-Control-Allow-Origin: *");
    

      


    注意,一定要在所有信息输出到客户端之前设置。

  • 相关阅读:
    数据流控制
    转:简单的Mysql主从复制设置
    转:CentOS---网络配置详解
    Linux-vim学习入门
    Linux图形界面与字符界面切换
    转:MySQL表名不区分大小写
    CentOS6.5_x86安装Mysql5.5.49
    Linux的环境变量设置和查看
    Linux防火墙的关闭和开启
    Linux command not found 问题解释
  • 原文地址:https://www.cnblogs.com/achengmu/p/6286158.html
Copyright © 2020-2023  润新知