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

跨域问题总结

时间:2023-04-05 16:20:10 HTML5

跨域问题有各种各样的场景和解决方法,只要是做前端开发的,总会遇到。这也是面试时必问的问题。所以自己研究总结。因为浏览器的同源策略,前端开发会遇到各种跨域问题。本文总结了遇到跨域问题的不同场景和相应的解决方案。前言在总结各种跨域问题之前,我们先了解一下浏览器的同源策略。协议、域名、端口全部相同,称为同源。这里我就不细说了。同源策略的目的是保证用户信息的安全,防止恶意网站窃取数据。想象这样一种情况:一个网站是一家银行,用户登录后浏览其他网站。如果其他网站可以读取网站A的cookie会怎样?显然,如果cookie中包含隐私(比如存款总额),这些信息就会被泄露。更可怕的是cookie经常被用来保存用户的登录状态。如果用户不注销,其他网站就可以冒充用户为所欲为。因为浏览器也规定了提交表单不受同源策略的限制。可见“同源策略”是必须的,否则cookies可以共享,上网就一点都不安全了。同源限制:1)无法读取不同源的Cookies、LocalStorage、IndexDB。2)无法获取不同来源的DOM。3)Ajax请求不能发送到不同来源的服务器。不受同源限制:在浏览器中,标签可以请求不同域名下的资源,即varscript=document.createElement('script');script.setAttribute("类型","文本/javascript");script.src='http://example.com/ip?callback=foo';document.body.appendChild(脚本);functionfoo(data){console.log('你的公网IP地址是:'+data.ip);};上面的脚本会向http://example.com/服务器发送请求。这个请求的url后面跟着一个回调参数,用来告诉服务器回调方法的方法名。因为服务端收到请求后,会将相应的数据写入foo的参数位置,也就是说服务端返回的脚本如下foo({"ip":"8.8.8.8"});这样浏览器通过会在下载完成后立即执行,也就是说上面的脚本代码会在http://example之后立即执行.com/ip?callback=foo请求返回,这段脚本代码是调用回调方法,获取json数据。4、Document.domain跨域场景一:在你的http://www.damonare.cn/a.html页面中使用