什么是跨域请求?浏览器在执行脚本时会检查是否同源,只有同源的脚本才会被执行。如果来源不同,则为跨域。什么是同源?同源的是:Netscape提出的著名的安全策略,它是浏览器最核心、最基本的安全功能。它限制了在一个源点(origin)加载文本或脚本以及与其他源点(origin)的资源交互的方式。同源是指协议、域名、端口相同。只要协议、域名、端口中的任何一个不同,就被认为是不同的域,它们之间的请求就是跨域操作。协议?域名?港口?Protocol:网络协议遍及OSI通信模型(OSI七层模型,常用的协议有TCP/IP、HTTP、FTP等)计算机或计算机组的名称,用于标识计算机的电子方向(有时也指地理位置)在数据传输过程中。端口:是设备与外界通信的出口。)理解了概念后,我们知道跨域请求就是网页浏览器在域名、协议、端口等不同的情况下不允许页面请求。所以作为一个前端开发者,在项目开发的时候解决这样的问题是很有必要的!为什么会有这样的限制?非同源请求页面会发生什么?想象这样一个场景:网站A是一家银行。用户登录后浏览其他网站B,如果B网站可以读取A网站的cookie,会发生什么情况?显然,如果cookie中包含隐私(比如存款总额),信息就会泄露。更可怕的是,cookie经常被用来保存用户的登录状态。如果用户不注销,其他网站就可以冒充用户为所欲为。因为浏览器也规定了提交表单不受同源策略的限制。非同源限定范围Cookies、LocalStorage、IndexDB无法获取DOM无法获取AJAX请求无法发送跨域请求解决方法一、jsonp:(JSONwithPadding是JSON的一种“使用方式”,可以用来解决跨域主流浏览器的requests域数据访问问题)原理:web客户端动态添加variframe=document.createElement('iframe');iframe.style.display='无';//隐藏varstate=0;//防止无限页面刷新iframe.onload=function(){if(state===1){console.log(JSON.parse(iframe.contentWindow.name));//清除创建的iframeiframe.contentWindow.document.write('');iframe.contentWindow.close();document.body.removeChild(iframe);}elseif(state===0){state=1;//加载完成,指向当前域,防止出错(proxy.html为空白页)//Blocke从访问跨源框架中获取源为“http://localhost:10000”的框架。iframe.contentWindow.location='http://localhost:10000/proxy.html';}};iframe.src='http://localhost:10001';document.body.appendChild(iframe);...
