web前端面试题@二(Keeplive、V-show和v-if的区别、同源策略及跨域)

一、详述Keeplive组件————

    ⑴.为什么要使用keep-alive?

            在vue中,我们使用component内置组件或者vue-router切换视图的时候,由于vue会主动卸载不使用的组件,所以我们不能保存组件之前的状态,而我们经常能遇到需要保存之前状态的需求,例如:搜索页(保存搜索记录),列表页(保存之前的浏览记录)等等。

    ⑵.keep-alive的作用?

            Keep-alive是一个vue的内置组件,它能将不活动的组件保存下来,而不是直接销毁,当我们再次访问这个组件的时候,会先从keep-alive中存储的组件中寻找,如果有缓存的话,直接渲染之前缓存的,如果没有的话,再加载对应的组件。

            作为抽象组件,keep-alive是不会直接渲染在DOM中的。

    ⑶.Keep-alive的属性?

        Keep-alive提供了三种可选属性

        Include-字符串或数组或正则表达式。只有名称匹配的组件被缓存。

        Exclude -字符串或数组或正则表达式。名称匹配的组件不会被缓存。

        Max -数字类型。表示最多可以缓存多少组件实例。

    ⑷.对于keep-alive需要知道的事情?

        Keep-alive提供了两个生命钩子,分别是activated与 deactivated。

        因为Keep-alive会将组件保存在内存中,并不会销毁以及重新创建,所以不会重新调用组件的created等方法,需要用activated与deactivated这两个生命钩子来得知当前组件是否处于活动状态。

二、V-show和v-if的区别?

        V-show有较高的渲染成本,

        V-if有较高的切换成本。


        V-if是真正的条件渲染,确保切换过程中条件内的事件监听器和子组件适当的被销毁和重建。

        V-show的元素始终被渲染并保存在dom中,操作的只是display属性控制演示影藏。

三、同源策略及跨域?

    (1).同源策略

        源(origin)—— 就是协议、域名和端口号。若地址里面的协议、域名和端口号均相同则属于同源。

        同源策略——同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以a.com下的js脚本采用ajax读取b.com里面的文件数据是会报错的。

    不受同源策略限制的

            1.页面中的链接,重定向以及表单提交是不会受到同源策略限制的。

            2.跨域资源的引入是可以的。但是js不能读写加载的内容。如嵌入到页面中的<script src="..."></script>,<img>,<link>,<iframe>等。

  (2).跨域

      跨域——只要协议、域名、端口号有一个不同就是跨域。

        跨域的原因?(只做了解)

  跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号(如存在)相同,则允许相互访问。为了防止某域名下的接口被其他域名下的网页非法调用,是浏览器对JavaScript施加的安全限制。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题,比如a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等。

   (3).跨域问题解决方案

       1、 Jsonp——

                利用script标签可跨域的特点,在跨域脚本中可以直接回调当前脚本的函数。jsonp是一种常用的跨域手段,和反向代理,服务端做跨域处理相比,jsonp更显得方便轻巧 jsonp的缺点只能发送get请求。因为script只能发送get请求需要后台配合。此种请求方式应该前后端配合,将返回结果包装成callback(result)的形式。

       2、 Cors——

                服务器设置HTTP响应头中Access-Control-Allow-Origin值,解除跨域限制。CORS 是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing),他允许浏览器向跨源服务器发送XMLHttpRequest请求,从而克服 AJAX 只能同源使用的限制

                缺点是:目前所有最新浏览器都支持该功能,但是万恶的IE不能低于10

Access-Control-Allow-Origin 这个字段是必须的,表示接受那些域名的请求(*为所有)、Access-Control-Allow-Credentials 该字段可选, 表示是否可以发送cookie、Access-Control-Expose-Headers 该字段可选,XHMHttpRequest对象的方法只能够拿到六种字段: Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma ,如果想拿到其他的需要使用该字段指定。

  !!!!注意:这两个跨域方案都存在一个致命的缺陷,严重依赖后端的协助。!!!!!

       3、反向代理(Reverse Proxy){前端独立就能解决的跨域方案}——

      指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。


    

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 跨域资源共享 CORS 对于web开发来讲,由于浏览器的同源策略,我们需要经常使用一些hack的方法去跨域获取资源...
    默默先生Alec阅读 607评论 0 0
  • HTML5有哪些新特性?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?新特性绘画 can...
    郝晨光阅读 3,224评论 1 35
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 1,325评论 0 6
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 1,077评论 0 2
  • 你不是末等生,你是一等兵。 万事总要欠缺一些,才能持恒。 做人与做事,首先要真诚。 做一个简单的人,不沉迷于幻想、...
    i亦非陌阅读 278评论 0 0