跨域

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

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,重启浏览器即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值