包含JS、CSS、React、浏览器等 前端经典面试题( 四 )

  • localStorage:localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的 。(key:同源窗口都会共享,并且不会失效,不管窗口或者浏览器关闭与否都会始终生效)
  • 补充说明一下cookie的作用:
    • 保存用户登录状态 。例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就不需要重新登录了,现在很多论坛和社区都提供这样的功能 。cookie还可以设置过期时间,当超过时间期限后,cookie就会自动消失 。因此,系统往往可以提示用户保持登录状态的时间:常见选项有一个月、三个 月、一年等 。
    • 跟踪用户行为 。例如一个天气预报网站,能够根据用户选择的地区显示当地的天气情况 。如果每次都需要选择所在地是烦琐的,当利用了 cookie后就会显得很人性化了,系统能够记住上一次访问的地区,当下次再打开该页面时,它就会自动显示上次用户所在地区的天气情况 。因为一切都是在后 台完成,所以这样的页面就像为某个用户所定制的一样,使用起来非常方便
    • 定制页面 。如果网站提供了换肤或更换布局的功能,那么可以使用cookie来记录用户的选项,例如:背景色、分辨率等 。当用户下次访问时,仍然可以保存上一次访问的界面风格 。
    7、Cookie如何防范XSS攻击参考答案XSS(跨站脚本攻击)是指攻击者在返回的HTML中嵌入JAVAscript脚本,为了减轻这些攻击,需要在HTTP头部配上,set-cookie:
    • httponly-这个属性可以防止XSS,它会禁止JavaScript脚本来访问cookie 。
    • secure - 这个属性告诉浏览器仅在请求为https的时候发送cookie 。
    结果应该是这样的:Set-Cookie=.....
    8、浏览器和 Node 事件循环的区别?参考答案其中一个主要的区别在于浏览器的event loop 和nodejs的event loop 在处理异步事件的顺序是不同的,nodejs中有micro event;其中Promise属于micro event 该异步事件的处理顺序就和浏览器不同.nodejs V11.0以上 这两者之间的顺序就相同了.
    function test () {console.log('start')setTimeout(() => {console.log('children2')Promise.resolve().then(() => {console.log('children2-1')})}, 0)setTimeout(() => {console.log('children3')Promise.resolve().then(() => {console.log('children3-1')})}, 0)Promise.resolve().then(() => {console.log('children1')})console.log('end') }test()// 以上代码在node11以下版本的执行结果(先执行所有的宏任务,再执行微任务)// start// end// children1// children2// children3// children2-1// children3-1// 以上代码在node11及浏览器的执行结果(顺序执行宏任务和微任务)// start// end// children1// children2// children2-1// children3// children3-19、简述HTTPS中间人攻击参考答案https协议由 http + ssl 协议构成,具体的链接过程可参考SSL或TLS握手的概述
    中间人攻击过程如下:
    1. 服务器向客户端发送公钥 。
    2. 攻击者截获公钥,保留在自己手上 。
    3. 然后攻击者自己生成一个【伪造的】公钥,发给客户端 。
    4. 客户端收到伪造的公钥后,生成加密hash值发给服务器 。
    5. 攻击者获得加密hash值,用自己的私钥解密获得真秘钥 。
    6. 同时生成假的加密hash值,发给服务器 。
    7. 服务器用私钥解密获得假秘钥 。
    8. 服务器用加秘钥加密传输信息
    防范方法:
    1. 服务端在发送浏览器的公钥中加入CA证书,浏览器可以验证CA证书的有效性
    10、说几条web前端优化策略【包含JS、CSS、React、浏览器等 前端经典面试题】参考答案(1). 减少HTTP请求数
    这条策略基本上所有前端人都知道,而且也是最重要最有效的 。都说要减少HTTP请求,那请求多了到底会怎么样呢?首先,每个请求都是有成本的,既包 含时间成本也包含资源成本 。一个完整的请求都需要经过DNS寻址、与服务器建立连接、发送数据、等待服务器响应、接收数据这样一个“漫长”而复杂的过程 。时间成本就是用户需要看到或者“感受”到这个资源是必须要等待这个过程结束的,资源上由于每个请求都需要携带数据,因此每个请求都需要占用带宽 。
    另外,由于浏览器进行并发请求的请求数是有上限的,因此请求数多了以后,浏览器需要分批进行请求,因此会增加用户的等待时间,会给 用户造成站点速度慢这样一个印象,即使可能用户能看到的第一屏的资源都已经请求完了,但是浏览器的进度条会一直存在 。减少HTTP请求数的主要途径包括:


    推荐阅读