摘要:只要协议域名端口有任何一个不同,都被当作是不同的域,之间的请求就是跨域操作。
什么是跨域请求?
当浏览器执行一个脚本时会检查是否同源,只有同源的脚本才会执行,如果不同源即为跨域
什么是同源?
同源即:由Netscape提出的著名安全策略,是浏览器最核心、基本的安全功能,它限制了一个源(origin)中加载文本或者脚本与来自其他源(origin)中资源的交互方式
,所谓的同源就是指协议、域名、端口相同。
只要协议、域名、端口有任何一个不同,都被当作是不同的域,之间的请求就是跨域操作。
协议?域名?端口?
协议:网络协议遍及OSI通信模型(OSI七层模型,常用协议有TCP/IP、HTTP、FTP协议等)
域名:Domain Name,网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)
端口:是设备与外界通讯交流的出口,分为物理端口和虚拟端口(常见的如80端口)
了解概念后我们知道跨域请求就是web浏览器自身不允许在域名、协议、端口等都不相同的情况下进行页面请求方为,因此作为前端developer在项目开发时是需要解决此类问题的!
为什么要有这种限制?非同源请求页面会怎么样?
设想这样一个情景:A网站是一家银行,用户登录以后,又去浏览其他的网站B,如果网站B可以读取A网站的Cookie,会发生什么问题?
显然,如果Cookie包含隐私(比如存款总额),这些信息就会泄露,更可怕的是,Cookie往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒用户,为所欲为。因为浏览器同时还规定,提交表单不受同源策略的限制。
非同源限制范围
Cookie、LocalStorage和IndexDB无法获取
DOM无法获得
AJAX请求不能发送
跨域请求解决方案
1. jsonp:(JSON with Padding是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题)
原理:网页客户端动态添加
...