跨域
2016-03-30 10:18
519 查看
协议,域名,端口都必须相同,才算在同一个域
ajax是否允许跨域?
解决方法(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,还得继续补增响应头:
需要将 XMLHttpRequest 对象的 withCredentials 属性设置为 true,JQuery1.5.1+ 就开始提供了相应的字段,使用方式如下:
设置 withCredentials 为 true 的请求中会包含 A.abc.com端的所有Cookie,这些Cookie仍然遵循同源策略,所以,你只能访问其中和 abc.com/B同根域的Cookie,而无法访问其他域的Cookie
Cross-Origin Resource Sharing,跨域资源共享,简称 CORS,可以作为一种跨域请求以及响应的解决方案
eg:需要设置多个域名允许访问
解决方法(2):
跨域使用POST方式,可以使用创建一个隐藏的iframe来实现
解决方法(3):
JSONP方法,这种方法只支持GET方式
ajax请求参数dataType:'JSONP'
附:
禁用chrome本地安全策略,不用配服务器环境也能发起ajax请求:
chrome 桌面快捷键 右键属性 在快捷方式标签下的“目标”框中加入 --disable-web-security,重启浏览器即可
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 | 不同域名 | 否 |
在被请求的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,重启浏览器即可
相关文章推荐
- 【云计算】Docker容器时间同步如何配置?
- 3月末中国域名商域名解析量19强:阿里云双料冠军
- Linux kernel的中断子系统之(六):ARM中断处理过程
- Kernel command using Linux system calls
- C/C++ 副作用和序列点
- 代表建议全国两会安排代表委员瞻仰毛主席遗容
- Linux禁止单用户模式(single)来增强系统安全
- Linux 休眠
- 产生随机密码10方法
- 不愿多等 禁止移动设备自动播放功能
- AppDelegate
- 集群、分布式、负载均衡区别与联系
- Ubuntu 远程桌面
- 《Linux运维之道》的截图 2-网路简单排错
- Hibernate的检索方式(1)
- YII Framework的filter过滤器用法分析
- 硬盘故障时无法关机:bash: /sbin/shutdown: Input/output error
- 调查称多地10%大米镉超标 食物污染链持续多年
- linux下 生成 resin-admin的 md5加密的密码
- RHEL6中,文件权限后面一个点的含义