计算机网络面试题整理


小编目前只更新了这些,后续还会继续更新的!

一.cookie、session、token、localStorage 、sessionStorage的区别?

在这里插入图片描述
一、cookie

  • 诞生原因:HTTP请求是无状态协议,一旦数据交换完毕,客户端与服务器之间的连接就会关闭,再次交换数据就会再次建立连接。也就是服务端无法将请求和响应之间的通信状态进行保存,设计之初就为什么不保存呢?是为了便于去处理大量的事务信息。
  • 作用:解决如何能在某个域名下的所有网站能够共享某些数据
  • 作用流程:
    • 第一次给服务器发请求的时候,服务器接收后就会创建session,并发送一个http响应到客户端,响应头中包含Set-Cookie头部 ,sessionId等,该cookie包含用户信息,客户端存储在本地,用来维护用户计算机中的信息,直到用户删除。
    • 当客户端再次访问该服务端时,就会把该cookie一起添加到http请求中,发送到服务器,服务端就能分解 cookie 解析出 sessionId 来在 session 列表中查找出对应的 session ,就可以识别当前用户是否登录。

二、session

  • 称为会话信息,session的作用和cookie的基本类似,但是两者的不同在于,cookie存储在客户端,session保存在服务器端,是在服务器端使用的一种记录客户端状态的机制。
  • 他会在客户端第一次访问服务端时生成,后面客户端访问时,会携带session_id,服务器就会在自身的储存中查询该用户的状态
  • 两者对比好比如一个会议要检查用户是否被邀请,cookie的就是邀请者有邀请函,session就是有举办方有一份名单,名单上有邀请者的名字,就能进入,没有就没有被邀请

cookie只是实现session的其中一种方案,还有很多中方式实现session,同时cookie和session往往是一起出现的,前者在客户端,后者在服务端。一般数据量比较大的时候是存储在服务端的.

三、token

  • 诞生原因: 也称作令牌,由uid+time+sign[+固定参数],当我们的客户端频繁的向服务端请求数据的时候,服务端就需要频繁的用密码和账户名去对比,为了避免这个频繁的操作。token就应运而生了,只要在登录了一次后,一般就会存储 token 在客户端的 ==localStorage ==中,每次请求的时候带上即可。
  • 组成:
    • uid: 用户唯一身份标识
    • time: 当前时间的时间戳
    • sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
    • 固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库
  • 解决问题:
    • 减轻服务器的压力,减少频繁的查询数据库。
    • 由应用管理,所以它可以避开同源策略
    • 可以避免 CSRF 攻击
    • 可以是无状态的,可以在多个服务间共享,便于分布式服务

// 通过axios请求拦截器添加token,从而拥有获取数据的权限 config请求头对象
axios.interceptors.request.use(config => {
  //通过axios请求拦截器添加token,从而拥有获取数据的权限 config请求头对象
  // 为请求头对象,添加token验证的Authorization字段
  config.headers.Authorization = window.sessionStorage.getItem('token')
  // console.log(config);
  // 在最后必须返回 return config
  return config
})
// 在response拦截器中,隐藏进度条 NProgress.done()
axios.interceptors.response.use(config => {
  NProgress.done()
  return config
})
  • tokken可以避免CSRF攻击?
  • 之所以会被CSRF攻击是因为我们的 cookie 被劫持了,攻击者伪造我们的请求,在我们不知道的情况下,拿到我们的 cookie 去访问服务器。对于服务器来说,因为是携带了 cookie 这个凭证,就会认为是本人在进行操作。
  • 同时 POST 请求并不受到浏览器同源策略的限制,因此可以任意地使用其他域的 Cookie 向其他域发送 POST请求,根据上面的条件就形成 CSRF 攻击了。
  • 但token不同,token是开发者为了防范csrf而特别设计的令牌,浏览器不会自动添加到headers里,攻击者也无法访问用户的token,所以提交的表单无法通过服务器过滤,也就无法形成攻击。

四、localStorage

  • 出现的原因:虽然本地的存储已经有cookie,因为需要发送到服务端,所以cookie的存储很小,4K左右,因为大了会影响每次访问携带的,而大多数浏览器支持2M以上,我们就可以使用localStorage来存储而且是绑定到同源的(域/协议/端口三者),非同源的无法访问到
  • 特点:
    • 在同源的所有标签页和窗口之间共享数据
    • 生命周期为永久生效,除非手动删除,不然关闭页面也会存在
    • 可以多个窗口共享(同一浏览器可以共享)
    • 以键值对的形式存储使用
-   localsStorage.setItem(key,value)
-   localStorage.getItem(key)
-   localStorage.removeItem(key)
-  localStorage.clear()

五、sessionStorage

  • sessionStorage 和localStorage大体上是相近的,但有更多的限制条件
  • 生命周期为关闭浏览器,数据在页面刷新后仍然保留,但在关闭/重新打开浏览器标签页后不会被保留
  • 同一个窗口下的数据可以共享,且在同一标签页下的 iframe 之间是共享的(假如它们来自相同的源)
  • 以键值对的形式存储使用
-   sessionStorage.setItem(key,value)
-   sessionStorage.getItem(key)
-   sessionStorage.removeItem(key)

cookie与sessionStorage,localStorage的区别有

  • 共同点:都是保存在浏览器端、且同源的
  • 区别:
    • 1、cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递,而sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下

    • 2、存储大小限制也不同,cookie数据不能超过4K,同时因为每次http请求都会携带cookie、所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大

    • 3、数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭之前有效;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie:只在设置的cookie过期时间之前有效,即使窗口关闭或浏览器关闭

    • 4、作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localstorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的

    • 5、web Storage支持事件通知机制,可以将数据更新的通知发送给监听者

    • 6、web Storage的api接口使用更方便

二、 DNS(domain name system)

定义

  • 域名系统的缩写,由解析器和域名服务器组成,又称域名解析服务器,就是把机名系统转换为IP地址的系统,靠它将需要访问的网址在域名服务器中找到,然后把信息传输到电脑上
    解析过程
  • 某个应用进程要将主机名解析为ip地址,就会调用解析程序,并成为DNS的一个用户
  • 把待解析的域名放到DNS请求报文中,以UDP用户数据报方式发送给本地域名,如果在本地域名能找到,
    域名查询
三、OSI模型中的传输层。传输层提供两种服务
  • 面向连接的可靠的服务(TCP)
  • 无连接的不可靠的服务(UDP)

相同点

  • 都是用来在程序之间传输数据的协议
  • 传输的数据最终都是二进制

不同点

  • UDP不需要建立连接
  • UDP性能损耗少,内存中的占用资源也少
  • UDP传播速度快,但是稳定性弱
  • TCP通过三次握手和四次挥手建立连接彼此之间有状态,从而保证建立起可靠的传输
四、传输层控制协议(TCP)和用户数据报协议(UDP)

在这里插入图片描述

概念:

  • UDP是网络传输层协议,提供无连接(彼此之间无状态的连接),不可靠数据报尽力传输服务,只提供了传输层需要实现的最低限度的功能,除了差错检验外,几乎没有对IP增加其他的东西。

数据报结构:

  • 源端口号:发送方的应用程序端口号(16位)
  • 目的端口号:接收方的应用程序的传输层端口号(16位)
  • 长度字段:UDP报文段中的字节数(首部和数据的总和)
  • 校验和:接收方检测报文字段是否正确传输,但是对于差错的恢复是无能为力的(采用的是校验码)
  • 应用数据
    image.png
五、为什么要UDP ?
  • UDP有单播,多播,广播的功能
  • UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式.

UDP使用场景

  • 发送数据包简单的将数据包封装一下速度快,但是可能产生丢包,使用于实时性较高的场景
  • 域名查询
  • 视频直播
  • 语音通话
六、传输层控制协议(TCP)

概念:TCP的全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 是面向连接的、可靠的流协议(流就是指不间断的数据结构)。TCP连接是全双工的不分客户端和服务端
1.为什么要TCP ?

  • 为了在不可靠的信道上建立可靠的连接

2.TCP如何保证可靠丢包问题,和发送包的内容的乱序问题?

  • 三次握手和四次挥手

3.TCP的使用场景?

  • TCP传输数据稳定可靠,适用于网络质量要求较高的场景,需要准确无误的传输给对方
  • 传输文件
  • 浏览网页
    4.三次握手?
    请添加图片描述
    5.四次挥手?
    请添加图片描述
七、 输入url后发生了什么?

详情:
1.浏览器(客户端)进行地址解析,补全域名
浏览器会对一些默认的东西进行补齐。例如:互联网url默认端口号为80,浏览器默认补齐功能会补齐协议http,有些还会直接在域名前面补上www。
2.,DNS域名解析

  • 先查看浏览器dns缓存中是否有域名对应的ip。
  • 如果没有,则查看操作系统dns缓存中是否有对应的ip(例如windows的hosts文件)。
  • 依旧没有就对本地区的dns服务器发起请求,
  • 如果还是没有,就直接到Root Server域名服务器请求解析。
    <1>、DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议

<2>、全球只有十三台逻辑根服务器
在这里插入图片描述
3.通过ip寻址和arp,找到目标(服务器)地址
4.三次握手建立TCP连接;
在这里插入图片描述
5.发送HTTP请求;等待响应
浏览器会对请求进行包装,包装成请求报文。
在这里插入图片描述
6.服务器处理请求,返回响应结果
浏览器请求报文到达服务器之后,服务器接口会对请求报文进行处理,执行接口对应的代码,处理完成后响应客户端。
在这里插入图片描述
在这里插入图片描述
7.关闭TCP连接
在这里插入图片描述
8.浏览器解析HTML
浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染树。渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节点。
9.浏览器布局渲染
浏览器采用至上而下的方式解析
html解析->外部样式、脚本加载->外部样式执行->外部脚本执行->html继续解析->dom树构建完成->加载图片->页面加载完成

八、HTTP2.0和HTTP1.0的区别

多路复用:同一个连接并发处理多个请求,同时数量也较多
二进制分帧:分割为更小的消息和帧,采用二进制格式编码
首部压缩:使用HPACK算法对header数据进行压缩,体积更小,速度更快
服务器推送:服务端推送是一种在客户端请求之前发送数据的机制,HTTP2.0引入了server push,它允许服务端推送资源给浏览器
内容安全(基于HTTPS)

九、http中hash和history的区别?

Hash :地址栏URL中的#符号 #/index window.location.hash
History:在host之后直接添加斜线和路径请求 /index,window.location.pathname
区别
是否向后端传参 :Hash的#后面的内容不会包含在请求中,只是被前端浏览器利用刷新网页;History是看到请求的url为完整的url,请求后端
是否刷新页面:Hash不刷新;History刷新
方法:Hash:onhashchange History:pushState replaceState

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值