zoukankan      html  css  js  c++  java
  • 跨域

    协议,域名,端口都必须相同,才算在同一个域

    ajax是否允许跨域?

         说明  是否允许通信
     http://www.a.com/a.php  http://www.a.com/a.php  同一个域名下   是
     http://www.a.com/aa/a.php  http://www.a.com/bb/b.php  同一域名下不同文件夹  是
     http://www.a.com:8000/a.php  http://www.a.com/b.php  同一个域名不同端口  否
     http://www.a.com/a.php  https://www.a.com/a.php  同一域名,不同协议  否
     http://www.a.com/a.php  http://170.32.82.74/b.php  域名和域名对应ip  否
     http://www.a.com/a.php  http://script.a.com/b.php  同一域名,不同二级域名  否
     http://www.a.com/a.php  http://a.com/b.php  二级域名和一级域名  否
     http://www.b.com/a.php  http://www.a.com/b.php  不同域名  否
     
    解决方法(1):
    在被请求的Response header中加入

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

    就可以实现ajax POST跨域访问

    这是html5新增的一项标准功能

    在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息,一个跨域请求就不会被浏览器的同源安全策略所阻止了

    • 如果设置 Access-Control-Allow-Origin:*,则允许所有域名的脚本访问该资源。
    • Access-Control-Allow-Origin:http://www.phpddt.com.com,允许特定的域名访问。

    跨域解决后,如果还要操作Cookie,还得继续补增响应头:

    header('Access-Control-Allow-Credentials:true');

    需要将 XMLHttpRequest 对象的 withCredentials 属性设置为 true,JQuery1.5.1+ 就开始提供了相应的字段,使用方式如下:

    $.ajax({
      url:"B.abc.com",
      xhrFields:{
      withCredentials:true
    },
      crossDomain:true
    });

    设置 withCredentials 为 true 的请求中会包含 A.abc.com端的所有Cookie,这些Cookie仍然遵循同源策略,所以,你只能访问其中和 abc.com/B同根域的Cookie,而无法访问其他域的Cookie

    Cross-Origin Resource Sharing,跨域资源共享,简称 CORS,可以作为一种跨域请求以及响应的解决方案

    eg:需要设置多个域名允许访问

    <?php  
    $ret = array(  
        'name' => isset($_POST['name'])? $_POST['name'] : '',  
        'gender' => isset($_POST['gender'])? $_POST['gender'] : ''  
    );  
      
    header('content-type:application:json;charset=utf8');  
      
    $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';  
      
    $allow_origin = array(  
        'http://www.client.com',  
        'http://www.client2.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');  //响应头设置  
    }  
      
    echo json_encode($ret);  
    ?>  

     解决方法(2):

      跨域使用POST方式,可以使用创建一个隐藏的iframe来实现

     解决方法(3):

      JSONP方法,这种方法只支持GET方式

      ajax请求参数dataType:'JSONP'

    附:

      禁用chrome本地安全策略,不用配服务器环境也能发起ajax请求:
      chrome 桌面快捷键 右键属性 在快捷方式标签下的“目标”框中加入 --disable-web-security,重启浏览器即可

  • 相关阅读:
    堆栈学习
    需要阅读的书籍
    Rust Book Lang Ch.19 Fully Qualified Syntax, Supertraits, Newtype Pattern, type aliases, never type, dynamic sized type
    Rust Lang Book Ch.19 Placeholder type, Default generic type parameter, operator overloading
    Rust Lang Book Ch.19 Unsafe
    Rust Lang Book Ch.18 Patterns and Matching
    Rust Lang Book Ch.17 OOP
    Rust Lang Book Ch.16 Concurrency
    Rust Lang Book Ch.15 Smart Pointers
    HDU3966-Aragorn's Story-树链剖分-点权
  • 原文地址:https://www.cnblogs.com/baby123/p/5336086.html
Copyright © 2011-2022 走看看