面试时问到跨域怎么回答(个人向回答)

219 阅读3分钟
  1. 首先跨域就是从一个域去请求另一个域的资源,域名,端口,协议等任意一个不同都是跨域

  2. 我知道的跨域解决方式有 

  • jsonp跨域
  • document.domain
  • iframe跨域
  • nginx反向代理跨域 
  • nodejs中间件代理跨域
  1. 但是工作中遇到跨域,我基本都是让后端解决,因为哪怕前端解决了,也是在在本地没有跨域问题了,发布到测试和正式环境,还是会跨域

  2. 我工作中用过的前端跨域解决方法,在vue中,有一个config.js文件,里面可以配置一个proxy代理方法,有个changeOrigin,设置为true,然后pathRewrite可以对请求路径进行重定向以匹配到正确的请求地址,target设置正确的请求地址,后端让用哪个域名就用哪个域名,或者使用已知的不会跨域的正确的域名,这样使用代理就不会跨域了

  3. (这个遇到的时候比较少,下面说的都是这个,可以作为了解)我还用到过另一种跨域,就是document.domain解决跨域

  4. 将一个子页面嵌入到父页面中,然后父组件会从自组件中取值,或者子组件从父组件中取值,比如用window.top.document.getElementById("userShowName").innerHTML方法,但是两者的域名可能不一样,Javascript出于对安全性的考虑,而禁止两个或者多个不同域的页面进行互相操作,会出现跨域问题

  5. 一般会报这个错误 Error: Permission denied to access property xxxx

  6. 浏览器判断是否跨域,是通过判断document.domain是否一致

  7. 为了解决这个跨域问题,如果需要在前端解决,可以将跨页面的域名改成一致的,

  8. 最好所有页面统一约定好域名,最外层和里层的都约定好域名,然后统一使用一个域名,就能解决跨域问题,使用document.domain能获取并且设置当前的域名,因为可能父页面里有很多子页面,如果全是以最外层的父页面的域名为准,如果父页面的域名包括二级三级,比如baijiahao.baidu.com,打印document.domain,结果为baijiahao.baidu.com,包含了二级域名,如果子页面都和父页面一样设置为二级域名,应该也会解决跨域问题,那假如父页面的二级域名改了,所有的子页面都需要改,所以我们如果统一域名,都是写到一级域名,比如baidu.com,因为一级域名基本不会改,所以哪怕父页面的二级域名改了 子页面也不会受到影响

  9. 还有就是如果需要使用document.domain去改域名,需要在页面最开始的时候就更改,不能等js运行了,在js里面更改,那就晚了,如果在vue里面用,需要在creat或者mount里面写,如果是在html里写,那就在最上面,在js代码运行之前写

  10. **

    **