当前位置: 首页 > Web前端 > HTML

同源策略和跨域

时间:2023-04-02 11:39:54 HTML

在前端开发的过程中,我们经常会遇到“跨域”的问题。下面的文章会列出我在工作中遇到的跨域问题。以及为什么会出现“跨域”问题,以及所谓的“same-originpolicy”同源策略的一点讨论1.历史1995年由Netscape提出,后来被其他浏览器厂商采纳。同源策略只是一种规范,并没有规定其具体的使用范围和实现方式。每个浏览器制造商都实现了自己的同源策略。一些Web技术默认采用同源策略,包括但不限于Silverlight、AdobeFlash、AdobeAcrobat、Dom、XMLHttpRequest。2.定义根据该政策,Web浏览器允许包含在第一个网页中的脚本访问第二个网页中的数据,但前提是两个网页具有相同的来源。源定义为URI方案、主机名和端口号的组合。同源判断三要素:同一个协议,同一个域名,同一个端口号3.存在的意义为了保证用户信息的安全,防止恶意网站篡改用户数据例如:假设有没有同源策略,那么我在A网站下的cookie可以被任何网站获取;那么这个网站的拥有者就可以使用我的cookie(也就是我的身份)在A网站下进行操作。同源策略可以说是Web前端安全的基石。如果没有同源策略,浏览器将毫无安全可言。4.限制:Cookies、localStorage、indexDB不能在异源站之间共享。Dom元素不能相互操作。Ajax请求不能通过flash发送。HTTP请求不能通过flash发送。其他的跨域同源策略都有严格的限制,但是在实际场景中,确实有很多地方需要突破同源策略的限制,也就是我们常说的跨域1.当cookie同源策略最早被提出,就是为了防止不同域名的网页共享cookie。但如果两个网页的一级域名相同,则可以通过设置document.domain共享cookie。比如https://market.douban.com和https://book.douban.com,这两个页面的一级域名都是douban.com,如果我执行documentinmarket.douban.com.domain='douban.com'document.cookie='cross=yes'ordocument.cookie='cross=yes;path=/;domain=douban.com'这样设置cookie后,在book.douban.com中是有可能得到这个cookie。除了在前端设置外,还可以在响应中直接设置cookie的域名为.douban.com。2.ajax在使用ajax的过程中,我们遇到最多的就是同源限制的问题。对于ajax,我们有3种方式来绕过同源策略的限制:2.1设置CORS设置跨域是目前ajax最常用的跨域方式,也是相对jsonp和websoket最安全的方式.唯一美中不足的是低版本浏览器对IE支持不是很好?5.5+?8+2?10+1?11Edge?Firefox?2+?3.5+Chrome?4+1?13+Safari?3.1+?4+1?6+3Opera?9+?12+1不支持中图像的CORS2使用XDomainRequest对象在IE8和IE9中有所支持(但有限制)3不支持