前端面试(持续更新)

前端面试(持续更新)

网络篇:

1、http和https的基本概念

http:是一个客户端和服务端请求和应答的标准(TCP),用于从www服务器传输超文本到本地浏览器的超文本传输协议。

https:是以安全为目标的HTTP通道,是对http加入SSL层进行了加密,建立一个信息安全通道。

2、http和https的区别和优缺点
  • http是超文本传输协议,https协议要比http协议更加的安全,https协议是通过ssl加密进行数据的传输,可以防止数据在传输的过程中被窃取,改变,确保数据的完整
  • http默认的端口是80端口,https默认的端口是443
  • http链接简单,是无状态的。https在握手阶段是比较费时间的,会使页面加载时间延长50%
  • https缓存不如http高效,会增加数据的开销
  • https需要ca证书,费用比较高
3、三次握手和四次挥手

第一次握手:客户端发送数据包给服务端,并把SYN标志位置为1

第二次握手:服务端收到客户端的请求,把SYN也置为1,同时生成数据包,ACK(确认连接)为1,ack为x+1

第三次握手:客户端收到服务端的同意请求返回,客户端再给服务端返回ack标准位置为y+1。完成TCP连接

第一次挥手:客户端停止发送数据发送网络包,告知服务器我要和你断开连接,之后进入一个类似等待的状态

第二次挥手:服务端收到断开连接请求包之后,也返回一个包,也进入等待状态,并询问确认断开连接吗

第三次挥手:客户端接收到服务端的确认指令之后,告知服务端可以释放断开连接,于是发送一个网络包,并再次进入等待,等待服务器真正断开释放连接

第四次挥手:服务端接收到客户端传过来的网络包指令,于是发送了释放连接最后的数据包,发送完成之后服务器进入关闭状态

4、http请求跨域问题
1、跨域的原理,什么是跨域

跨域是指浏览器不能执行其它网站的脚本。他是由浏览器同源策略造成的。

同源策略是浏览器对js实施的安全限制。只要协议,域名,端口有任何一个不同,都会当做是不同的域,就会出现跨域

2、解决方案

1、使用jsonp的方式,jsonp只能支持get请求

  1. 去创建一个script标签
  2. script的src属性设置接口地址
  3. 接口参数,必须要带一个自定义的函数,要不然后台无法返回数据
  4. 通过定义函数名去接受返回的数据

2、proxy代理方式

在vue2项目里面就可以进行相应的操作,具体代码如下

proxyTable: {
    '/film': {  ///fil是匹配的路径
        target: 'https://m.maizuo.com',  //代理转换的路径
        changeOrigin: true,
        pathRewrite: {
            '^/film': ''  //在生成路径里面删除/film
        }
    },
},

可根据自身项目的情况进行相应的配置

3、h5的新特性window.postMessage()

具体使用的方式可以参考:https://blog.csdn.net/qq_45745319/article/details/123372895

4、就是后端解决

设置白名单,corc …等

5、Cookie,sessionStorage,localStorage的区别

cookie:

Cookie内容主要包括:名字name,值value,过期时间expires,路径path和域domain。路径和域一起构成cookie的作用范围。Cookie在设置过期时间之前是一直有效的,存储文件的大小在4kb左右,一般cookie存储在内存里,若是设置了过期时间则存到硬盘里面,浏览器关闭也不会失效,若不设置过期时间,则有效期就是浏览器窗口的会话期间,关闭浏览器窗口就会失效

原理:

客户端请求服务器时,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。而客户端浏览器会把Cookie保存起来。当浏览器再请求服务器时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器通过检查该Cookie来获取用户状态。

localStorage:

localStorage的生命周期是永久,除非手动去清除,否则永远都存在,他的储存大小是5MB,仅在客户端浏览器上储存,不参与服务器的通信。

  //设置localStorage保存到本地,第一个为变量名,第二个是值
  localStorage.setItem('Author', 'Jane')
  // 获取数据
  localStorage.getItem('Author')
  // 删除保存的数据
  localStorage.removeItem('Author')
  // 清除所有保存的数据
  localStorage.clear()

sessionStorage:

sessionStorage顾名思义,是在当前会话下有效,引入了一个“浏览器窗口的概念”,sessionStorage是在同源的同窗口中,始终存在的数据,只要浏览器不关闭,即使是刷新或者进入同源的另一个页面,数据仍在。同时打开“独立”的窗口,即使是同一个页面,sessionStorage的对象也是不同的。关闭窗口后sessionStorage就会被销毁。

  // 设置sessionStorage保存到本地,第一个为变量名,第二个是值
  sessionStorage.setItem('sessionName', 'John')
  // 获取数据
  sessionStorage.getItem('sessionName')
  // 删除保存的数据
  sessionStorage.removeItem('sessionName')
  // 清除所有保存的数据
  sessionStorage.clear()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值