计网面试题
http、计算机网络
http和https
http: 超文本传输协议,信息是明文传输,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少
https 是以安全为目标的http通道,是由http 和ssl协议构建的可进行加密传输和身份认证的网络协议,比http协议的安全性更高,需要ca证书,费用较高
http1.0 http1.1 http2
http1.1
- 长连接
- 节约带宽
- HOST域
- 缓存处理
- 错误通知的管理
http2.0
- 多路复用
- 头部数据压缩
- 服务器推送
http状态码
- 2开头的表示成功
- 一般见到的就是200
- 3开头的表示重定向
- 301永久重定向
- 302临时重定向
- 304表示可以在缓存中取数据(协商缓存)
- 4开头表示客户端错误
- 403跨域
- 404请求资源不存在
- 5开头表示服务端错误
- 500
三次握手 四次挥手
三次握手 客户端和服务端需要知道双方都能够收发
①首先 Client 端发送连接请求报文
②Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。
③Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ii2ftPhZ-1636986335939)(http%E3%80%81%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.assets/image-20211115170432167.png)]
四次挥手
建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源
可以是客户端发起也可以是服务端发起
①客户端申请断开连接即FIN,发送Seq+Ack
②服务端接收信息返回,表示我已经接收到
③服务端发送信息表示可以断开连接
④客户端接受信息,返回数据表示已接受信息
既然握手的时候,服务端发送的两个请求可以合并,那么释放连接的时候,是否也能合并,只需三次握手呢?
我们的回答是不能够,因为当服务器收到客户端关闭连接的请求的时候,服务端可能还在继续发送数据,但是他又必须先给客户端一个回应,说我收到了请求。等服务端的数据发送完毕之后,再发一个数据包说我已经可以关闭请求了。客户端收到之后再作出回应。
OSI七层模型
- 七层模型
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
- TCP属于传输层
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zy8qUFeG-1636986335951)(http%E3%80%81%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.assets/image-20211115171104856.png)]
localStorage、sessionStorage、cookie、session
localStorage和sessionStorage
生命周期
localStorage 的生命周期是永久的,关闭页面或者浏览器之后,localStorage 里面的数据也不会消失。localStorage 除非主动删除数据,否则永远不会消失。
sessionStorage 的声明周期仅在当前会话下有效,sessionStorage 是在同源的窗口中始终存在的数据,只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源的另一个页面,数据依然存在。但是 sessionStorage 在关闭了浏览器窗口后就会被销毁。
存储位置
保存在客户端,不与服务器进行交互通信
存储内容类型
只能存储字符串,对于复杂类型,可使用JSON
cookie和session
cookie数据存放在客户的浏览器上,session数据放在服务器上
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最毒保存20个cookie
Get和Post
get 是从指定的资源请求数据,post 是向指定的资源提交要处理的数据
-
传参
- get传参,参数是在url中的
- post传参,参数是在请求体中
-
安全性
- get较不安全
- post较为安全
- 准确的说两者都不安全,都是明文传输的,在路过公网的时候都会被访问到,不管是url还是header还是body,都会被访问到,要想做到安全,就需要使用https
-
参数长度
- get参数长度有限,是较小的
- 准确来说,get在url传参的时候是很小的
- post传参长度不受限制
- get参数长度有限,是较小的
-
字符编码
- get在url上传输的时候只允许ASCII编码
Http缓存
强缓存和协商缓存
根据响应的header内容来决定,两者的主要区别是使用本地缓存的时候,是否需要向服务器验证本地缓存是否依旧有效。顾名思义,协商缓存,就是需要和服务器进行协商,最终确定是否使用本地缓存。
强制缓存只有首次请求才会跟服务器通信,读取缓存资源时不会发出任何请求,资源的 Status
状态码为 200
,强制缓存的过期时间通过第一次访问服务器时返回的响应头获取
协商缓存与强制缓存的不同之处在于,协商缓存每次读取数据时都需要跟服务器通信,并且会增加缓存标识。第一次是拿数据和标识的过程,第二次开始,就是浏览器询问服务器资源是否有更新的过程。服务器拿到标识后判断标识是否匹配,如果不匹配,表示资源有更新,服务器会将新数据和新的缓存标识一起返回到浏览器;如果缓存标识匹配,表示资源没有更新,并且返回 304
状态码,浏览器就读取本地缓存服务器中的数据
tcp和udp区别
- 连接方面
tcp面向连接,udp不需要连接
tcp需要三次握手四次挥手请求连接
- 可靠性
tcp是可靠传输;一旦传输过程中丢包的话会进行重传
udp是不可靠传输,但会最大努力交付
- 工作效率
UDP实时性高,比TCP工作效率高
因为不需要建立连接,更不需要复杂的握手挥手以及复杂的算法,也没有重传机制
- 是否支持多对多
TCP是点对点的
UDP支持一对一,一对多,多对多
浏览器输入url经历了什么
- 先进行DNS域名解析,优先查看本地hosts文件有没有当前域名对应的ip地址,若有直接发起请求,没有的话会在本地DNS服务器去查找,如果本地域名服务器没查找到,会从DNS根服务器查找,根域名会告诉你从哪个与服务器查找,最后查找到对应的ip地址后把对应规则保存到本地的hosts文件中。
- 建立TCP连接三次握手
- 浏览器向服务器发起http请求
- 服务器响应http请求至浏览器
- 浏览器解析资源 对页面进行渲染
- tcp四次挥手 断开连接
xss和csrf
XSS:跨站脚本攻击,是说攻击者通过注入恶意的脚本,在用户浏览网页的时候进行攻击,比如获取cookie,或者其他用户身份信息
CSRF:跨站请求伪造,可以理解为攻击者盗用了用户的身份,一用户的名义发送了恶意请求,防御方式:使用验证码,检查https头部的refer,使用token