CORS 协议(跨域资源共享)
跨域问题
只要协议、域名、端口有任何一个不同,都被当作是不同的域。

为什么会有跨域的限制?
之前发生过的一些跨域安全事件:
新浪微博XSS受攻击事件
2011年6月28日晚,新浪微博出现了一次比较大的XSS攻击事件。大量用户自动发送诸如:“郭美美事件的一些未注意到的细节”,“建党大业中穿帮的地方”,“让女人心动的100句诗歌”,“3D肉团团高清普通话版种子”,“这是传说中的神仙眷侣啊”,“惊爆!范冰冰艳照真流出了”等等微博和私信,并自动关注一位名为hellosamy的用户。
事件的经过线索如下:
20:14,开始有大量带V的认证用户中招转发蠕虫
20:30,某网站中的病毒页面无法访问
20:32,新浪微博中hellosamy用户无法访问
21:02,新浪漏洞修补完毕
http://coolshell.cn/articles/4914.html
百度贴吧xss攻击事件
2014年3月9晚,六安吧等几十个贴吧出现点击推广贴会自动转发等。
并且受到xss攻击的转帖吧友所关注的每个关注的贴吧都会转一遍,病毒循环发帖。并且导致吧务人员,和吧友被封禁。
CORS 协议
CORS 协议是W3C的标准协议(https://www.w3.org/TR/cors/ ),
CORS(Cross-Origin Resource Sharing)跨域资源共享,这个协议 定义了必须在访问跨域资源时,浏览器与服务器应该如何沟通。CORS背后的基本思想就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败。
CORS 浏览器的支持情况
各种浏览器对 CORS 的支持情况如下图。(图来自: http://caniuse.com/#search=CORS)

- IE11 does not appear to support CORS for images in the canvas element
- Android and some old versions of WebKit (that may be found in various webview implementations) do not support Access-Control-Expose-Headers: https://code.google.com/p/android/issues/detail?id=56726
- IE10+ does not make a CORS request if port is the only difference (IE Bug #781303)
- IE10+ does not send cookies when withCredential=true (IE Bug #759587). A workaround is to use a P3P policy
CORS 的工作流

图来自: http://www.html5rocks.com/en/tutorials/cors/
如果浏览器 自身提供对CROS的支持,由它发送的请求会携带一个名为“Origin”的报头表明请求页面所在的站点。
资源获取请求被提供者接收之后,它可以根据该报头确定提供的资源需要共享给谁。资源提供者的授权通过一个名为“Access-Control-Allow-Origin”的响应报头来承载,其报头值表示得到授权的站点。一般来说,如果资源的提供者认可了当前请求的“Origin”报头携带的站点,那么它会将该站点作为“Access-Control-Allow-Origin”响应报头的值。除了指定具体的源并对其作针对性授权之外,资源提供者还可以将“Access-Control-Allow-Origin”报头值设置为“*”对所有消费者授权。
当浏览器接收到包含资源的响应之后,会提取此“Access-Control-Allow-Origin”响应报头的值。如果此值为“*”或者包含的源列表包含此前请求的源(即请求的“Origin”报头值),意味着资源的消费者获取了提供者获取和操作资源的权限,所以浏览器会允许JavaScript程序操作获取的资源。如果此响应报头不存在或者其值为“null”,客户端JavaScript程序针对资源的操作会被拒绝。
服务器端支持 CORS 的 流程图

图来自: http://www.html5rocks.com/en/tutorials/cors/
tomcat 添加CROS跨源请求 请参考 http://blog.csdn.net/liuwei063608/article/details/47273971
我们之前在玩 jsonp 的时候, 也会遇到跨域的问题, 它跟 cors 的对比如下:
CORS与JSONP相比,无疑更新,考虑支持的更全。
1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS。
参考资料:
Cross-Origin Resource Sharing协议介绍
http://www.cnblogs.com/shanyou/archive/2012/09/16/2687907.html
详解js跨域问题
https://segmentfault.com/a/1190000000718840
W3C的CORS Specification
http://www.cnblogs.com/artech/p/cors-4-asp-net-web-api-02.html
Spring通过CROS协议解决跨域问题
http://www.open-open.com/lib/view/open1463878352785.html
CORS 协议(跨域资源共享)的更多相关文章
- HTML5安全:CORS(跨域资源共享)简介。。。ie67不要想了。。。
来源:http://blog.csdn.net/hfahe/article/details/7730944 前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Go ...
- CORS(跨域资源共享)简介
前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Google上搜索CORS,搜到的中文文章基本都是另外一种卫星定位技术CORS的介绍,让我等前端同学情何以堪(对 ...
- HTML5安全:CORS(跨域资源共享)简介
前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Google上搜索CORS,搜到的中文文章基本都是另外一种卫星定位技术CORS的介绍,让我等前端同学情何以堪(对 ...
- TML5安全:CORS(跨域资源共享)简介
来源:http://blog.csdn.net/hfahe/article/details/7730944 前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Go ...
- CORS(跨域资源共享) 的配置
http://blog.csdn.net/ohyoyo2014/article/details/24863197 兼容情况: 各种新版本的ie10,firefox,opera,safari,chrom ...
- HTML5安全:CORS(跨域资源共享)简介【转】
前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Google上搜索CORS,搜到的中文文章基本都是 另外一种卫星定位技术CORS的介绍,让我等前端同学情何以堪( ...
- 信息安全-浏览器-CORS:CORS(跨域资源共享)
ylbtech-信息安全-浏览器-CORS:CORS(跨域资源共享) 1.返回顶部 1. CORS,全称Cross-Origin Resource Sharing,是一种允许当前域(domain)的资 ...
- [CORS:跨域资源共享] 同源策略与JSONP
Web API普遍采用面向资源的REST架构,将浏览器最终执行上下文的JavaScript应用Web API消费者的重要组成部分."同源策略"限制了JavaScript的跨站点调用 ...
- [CORS:跨域资源共享] W3C的CORS Specification
随着Web开放的程度越来越高,通过浏览器跨域获取资源的需求已经变得非常普遍.在我看来,如果Web API不能针对浏览器提供跨域资源共享的能力,它甚至就不应该被称为Web API.从另一方面来看,浏览器 ...
- CORS(跨域资源共享)
前言:上一篇文章在写如何使用JSONP实现跨域请求的时候,偶然间提到CORS,即Cross-Origin Resource Sharing(跨域资源共享).虽然前些天也看了一下CORS相关的文章,但是 ...
随机推荐
- Sep14学习笔记_pipe() & fork()
第一次用博客园,昨晚编辑器一直没打开,今天打开了,把昨天的内容先补一下 关于parent和child之间的数据传输: If the parent wants to receive data from ...
- React(JSX语法)-----JSX属性
1. if you know all the propertities that you want to place on a component ahead of time,it is easy t ...
- angular2 - content projection-
angular2中的内容映射: App.component: <my-day> <my-lucky> </my-lucky> </my-day> MyD ...
- Spring使用ThreadLocal技术来处理这些问题
过去我习惯于从左到右的思考,因为这符合书写的习惯,对于“好”得前端工程师,我们首先可能会去思考什么是好,好的定义和范围,标准和要求?但现在我习惯于从右到左的思考,因为我觉得越是抽象越难以定义,从粒度更 ...
- dentry与inode有什么联系和区别
我们在进程中要怎样去描述一个文件呢?我们用目录项(dentry)和索引节点(inode).它们的定义如下: struct dentry {struct inode ...
- Android AsyncTask 简单用法
简介 AsyncTask 是一个轻量级的异步处理类.使用是需继承自该类.可以方便的执行异步任务并且在将进度显示在UI上. 注意事项 AsyncTask只适合处理轻量级的任务即耗时几秒或者几十秒的任务. ...
- 用程序获取 Internet 时间 无通用性程序后的暂用办法
并不是完全失败,但没找到一个通用的办法,这个通用指的不能通用所有的时间服务器,而不是说操作系统. 网上的方案很多,有用Socket类.或TcpClient类(C#).或UdpClient类,端口有使用 ...
- 在Windows上运行InfoPi
一.安装Python Python官网的下载页面: https://www.python.org/downloads/ 请下载Python 3.4或以上版本. (Python 3.5已不再支持Win ...
- rabbitmq, windows/linux, c/c++/node.js/golang/dotnet
官网:http://www.rabbitmq.com/ zeromq 相当于 message backbone,而rabbitmq相当于message broker.有的应用系统中,二者并存. (1) ...
- Win7下搭建VPN服务器教程
前言:VPN就是一个中转器,移动网要访问外网,外网是网通的,没使用VPN的情况下我们就不能访问外网,这时候VPN就把我们的移动网自动转成能和外网连接所匹配的网,就实现了所谓的(fanqiang). 一 ...