• 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: *");
    

      


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

  • 相关阅读:
    使用C++ 实现的 websocket 客户端 (基于easywsclient)
    ant打包报错 JRE version less than 1.8 is not suppored
    离线安装SVN 4.2.3
    maven项目使用oracle11g
    springboot 新工程报错 Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    IP与域名绑定
    web项目如果省略端口
    Linux源码安装Python3.7服务
    Linux yum软件包安装、管理与使用
    RPM软件包管理与使用
  • 原文地址:https://www.cnblogs.com/achengmu/p/6286158.html
Copyright © 2020-2023  润新知