HTML5中Access-Control-Allow-Origin解决跨域问题
来源:互联网 发布:驱蚊手环有用吗 知乎 编辑:程序博客网 时间:2024/05/14 20:40
Access-Control-Allow-Origin解决跨域问题,是html5新增的一项标准功能,因此 IE10以下 版本的浏览器是不支持 的,因此,如果要求兼容IE9或更低版本的ie浏览器,会导致使用此种方式的跨域请求以及传递Cookie的计划夭折,最终还得回归JSONP(目前主流的处理方式是使用JSONP,易于实现,兼容性好,可查的资料也很多。)
A.abc.com 发起一个到 abc.com/B 的ajax请求,也会有跨域的问题。
之所以会有跨域问题,实则是因为www.abc.com其实同A.abc.com一样,也是一个二级域名,而非一级域名(一级域名是http://abc.com)
对于是否允许跨域,更详细的说明可以看下表:
若在接收请求的服务端abc.com/B页面用的是php语言,则在页面中加入:
// 指定可信任的域名来接收响应信息,推荐
<?php header('Access-Control-Allow-Origin:http://A.abc.com'); ?>
或加入
// 使用通配符 * ,表示当前服务端通话任何域名发起请求,不推荐
<?php header('Access-Control-Allow-Origin:*'); ?>
就这样在服务端简单加一句响应头responese headers声明,一个跨域请求就不会被浏览器的同源安全策略所阻止了!
用chrome调试工具Network ajax请求查看面板中可以看到,类似如下截图:cors
需要注意的是:
添加响应头responese headers时,允许跨域请求的域名带不带斜杠/还是有区别的,带斜杠/会报错:
XMLHttpRequest cannot load abc.com/B. The 'Access-Control-Allow-Origin' header has a value 'http://A.abc.org/' that is not equal to the supplied origin. Origin 'http://A.abc.org' is therefore not allowed access.
header('Access-Control-Allow-Origin:*');是html5新增的一项标准功能,因此 IE10以下 版本的浏览器是不支持 的,因此,如果要求兼容IE9或更低版本的ie浏览器,会导致使用此种方式的跨域请求以及传递Cookie的计划夭折,最终还得回归JSONP(目前主流的处理方式是使用JSONP,易于实现,兼容性好,可查的资料也很多。)
跨域解决后,如果还要操作Cookie,还得继续补增响应头:
<?php header('Access-Control-Allow-Credentials:true'); ?>
需要将 XMLHttpRequest 对象的 withCredentials 属性设置为 true,JQuery1.5.1+ 就开始提供了相应的字段,使用方式如下:
$.ajax({
url:"B.abc.com",
xhrFields:{
withCredentials:true
},
crossDomain:true
});
哦也~ 收到 Cookie 了。
设置 withCredentials 为 true 的请求中会包含 A.abc.com端的所有Cookie,这些Cookie仍然遵循同源策略,所以,你只能访问其中和 abc.com/B同根域的Cookie,而无法访问其他域的Cookie。
Access-Control-Allow-Origin实则是html5 Cross-Origin Resource Sharing实现的最重要的一点参数配置。
Cross-Origin Resource Sharing,跨域资源共享,简称 CORS,可以作为一种跨域请求以及响应的解决方案。
附:
禁用chrome本地安全策略,不用配服务器环境也能发起ajax请求:
chrome 桌面快捷键 右键属性 在快捷方式标签下的“目标”框中加入 --disable-web-security,重启浏览器即可
- HTML5中Access-Control-Allow-Origin解决跨域问题
- HTML5中Access-Control-Allow-Origin解决跨域问题
- HTML5中Access-Control-Allow-Origin解决跨域问题
- HTML5 Access-Control-Allow-Origin解决跨域问题
- HTML5开发中Access-Control-Allow-Origin跨域问题
- Access-Control-Allow-Origin解决Ajax跨域问题
- Access-Control-Allow-Origin 解决跨域权限问题
- Access-Control-Allow-Origin 解决跨域权限问题
- 跨域问题:Access-Control-Allow-Origin
- 跨域问题Access-Control-Allow-Origin
- Access-Control-Allow-Origin跨域问题
- Access-Control-Allow-Origin 跨域问题
- Access-Control-Allow-Origin跨域问题
- Access-Control-Allow-Origin 跨域问题
- 解决Ajax跨域问题:Origin xx is not allowed by Access-Control-Allow-Origin.
- 解决Ajax跨域问题:Origin xx is not allowed by Access-Control-Allow-Origin
- 关于Access-Control-Allow-Origin的跨域错误解决
- 使用Access-Control-Allow-Origin解决跨域
- C++中头文件(.h)和源文件(.cpp)都应该写些什么
- golang json 处理
- myself C# template 格式规范
- 修改Maven的JDK版本
- 外部Activity和fragment之间的切换
- HTML5中Access-Control-Allow-Origin解决跨域问题
- MySQL 查询数据不一致
- iOS UITextField 限制输入长度,中英文混排,汉字占2个长度,英文数字占1个长度
- fork()
- 查看进程运行时间
- 在Unity3D中使用Visual Studio调试shader
- Linux shell实现每天定时备份mysql数据库
- git常用操作
- MySQL问题一 升序和降序