大前端面试题集锦——HTTP篇

HTTP篇

1.什么是HTTP/HTTPS?

  • HTTP指的是超文本传输协议,是一种在浏览器客户端或其他程序中发送请求与服务器响应过程中的应用层通信协议
  • HTTPS是由HTTP+SSL构成的一种可以进行加密传输与身份认证的一种安全通信通道

2.HTTPHTTPS有什么区别?

  • HTTP
    • 使用明文传输信息,安全性差
    • 默认使用80端口号
    • 连接是无状态的
  • HTTPS
    • HTTP+SSL构成,对信息进行加密传输,需要进行身份认证,安全性高
    • 默认使用443端口号
    • 需要到ca申请证书,需要承担额外的费用

3.HTTP常见的响应状态码有哪些?

  • 1**信息响应状态码
    • 100客户端必须继续发送请求*
    • 101客户端要求服务器根据请求转换HTTP协议*
  • 2**成功状态码
    • 200请求成功*
    • 201请求成功并创建了新的资源*
    • 202接受和处理,但尚未完成处理
    • 203返回信息不确定或不完整
    • 204返回信息为空*
    • 205服务器完成了请求,但是用户代理必须复位当前已浏览过的文件
    • 206服务器完成了用户的部分get请求
  • 3**重定向状态码
    • 300请求的资源可以在多处获得
    • 301删除请求数据*
    • 302在其他地址发现了请求数据*
    • 303建议用户访问其他URL或者更换访问方式
    • 304用户请求的资源未被修改,可以使用缓存的资源*
    • 305请求的资源必须从服务器指定的URL获取
    • 306前一版本中HTTP使用的代码,现版本不再使用
    • 307请求的资源被临时删除
  • 4**客户端错误状态码
    • 400请求错误,服务器无法理解*
    • 401请求授权失败*
    • 402保留有效chargeto头响应
    • 403禁止访问*
    • 404请求资源未找到*
    • 405用户在request-line字段定义的方法不允许
    • 406请求资源不可访问
    • 407用户必须首先在代理服务器中得到授权
    • 408客户端没有在用户指定的时间内完成请求
    • 409当前资源的状态请求无法完成
    • 410服务器上不再存在此资源并且没有参考地址
    • 411服务器拒绝用户定义的content-length属性请求
    • 412请求头中存在字段错误
    • 413请求的资源大于服务器允许的大小
    • 414请求的URL长度大于服务器允许的长度
    • 415请求资源不支持请求项目格式
    • 416请求中包含range请求头字段,但请求资源范围内没有range指示值
    • 417服务器不满足expect请求头指定的期望值
  • 5**服务端错误状态码
    • 500服务器内部错误*
    • 501服务器不支持请求的函数
    • 502服务器暂时不可用*
    • 503服务器过载或暂停维护*
    • 504关口过载,服务器使用另外的关口响应请求,等待时间设定值较长
    • 505服务器不支持或拒绝请求头中指定的HTTP版本

4.常见的HTTP请求有哪些?有什么区别?

请求方法作用
get获取资源,向服务器查询信息
post将包含在请求体中的数据向指定的地址进行提交
head返回的响应中没有具体内容,通常用于获取报头
put从客户端发送数据以取代指定文档的内容
delete请求服务器删除指定内容
connect要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信
options询问支持的请求方法,用来跨域请求
trace回显服务器收到的请求,用于测试或诊断
  • 上述请求中,getpost请求更加常用
  • get请求传参通常直接跟在URL地址后面以?的方式进行拼接,并且将多个参数用&进行连接,使用get方式传递的参数具有大小限制,这通常是因为对URL长度有限制,使用get请求,在地址栏能够看到提交的参数信息,通常意味着存在安全风险

5.什么是三次握手与四次挥手?

  • 三次握手指的是客户端与服务端之间进行通信连接的三个步骤
    • 第一次握手是用来建立连接,客户端发送连接请求报文,发送规定的数据包
    • 第二次握手是服务器端表示接收到连接请求报文,并回传规定的数据包
    • 第三次握手是客户端接收到了服务端回传的数据包之后,给服务端再次发送数据包
  • 四次挥手指的是当前连接请求已经结束,需要断开此次连接
    • 第一次挥手是客户端对服务端发起断开请求
    • 第二次挥手是服务端确认收到这次的断开请求
    • 第三次挥手是服务端表示已经断开连接
    • 第四次挥手是客户端表示已经断开连接

6.详细说说get请求与post请求有什么区别?

区别getpost
应用场景请求通常不会影响服务端资源会影响服务端资源
参数传递通常使用明文的方式在URL末尾使用?拼接参数,多个参数使用&连接将参数放在请求体中进行发送
安全性不安全安全
缓存一般会缓存一般不会缓存
请求长度限制请求参数长度不受限制
参数类型使用名值对的方式使用名值对,json数据格式等
报文格式报文中实体部分为空实体部分用来存放请求参数

7.详细说说post请求与put请求有什么区别?

postput
通常会增加数据库中数据的长度或类别,它会创建一个新的数据通常用来更新服务器的部分数据,并不会更改原数据库中的数据长度

8.常见的HTTP请求头与响应头有哪些?

  • 请求头
namedescription
accept浏览器能够处理的内容类型
accept-charset浏览器能够显示的字符集
accept-encoding浏览器能够处理的压缩编码
accept-language浏览器当前设置的语言
connection浏览器与服务器之间的连接类型
cookie当前页面设置的任何cookie
host当前请求的页面所在的域
referer当前浏览器发出请求的页面的URL
user-agent浏览器的用户代理字符串
  • 响应头
namedescription
date消息发送的时间
server服务器名称
connection浏览器与服务器之间连接的类型
cached-control控制浏览器的缓存
content-type表示后面的文档属于什么MIME类型
  • content-type有如下类型
    • application/x-www-form-urlencoded可以提交表单类型数据,以名值对的格式
    • application/json提交json字符串类型的数据
    • text/xml提交xml类型的数据
    • multipart/form-data提交表单类型数据

9.HTTP状态码304是多好还是少好?

  • 304状态码指的是客户端请求的网页内容与本地缓存的内容一致,没有发生变化
  • 浏览器对之前访问过的页面会进行缓存,当用户对访问过的页面再次请求时,服务器会根据缓存判断请求内容是否与之前相同,如果相同,浏览器会直接使用缓存内容,不必进行二次下载
  • 搜索引擎会青睐经常更新内容的网站,通过特定时间内对网站抓取返回的状态码来调节对该网站的抓取频次
    • 如果网页响应长期处于304状态,搜索引擎就会减少对该网站的抓取频次
  • 产生304的原因
    • 网站更新周期长或者停止更新
    • 网站采用的是静态页面
  • 长期产生304状态的后果
    • 网站快照停止
    • 网站收录减少
    • 网站权重下降

10.options请求方法与应用场景是什么?

  • options请求用于查询服务器支持的HTTP方法与其他选项
  • 客户端在采取具体的资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能
  • 用途
    • 获取服务器支持的所有HTTP方法
    • 检查访问权限,跨域请求预检测

11.HTTP1.0HTTP1.1的区别?

区别HTTP1.0HTTP1.1
连接方面非持久连接持久连接
资源请求方面不支持客户端取回部分数据允许客户端取回部分数据,新增put,options,head请求方法
缓存方面缓存策略少(If-Modified-Since,Expires)支持更加丰富的缓存策略(Etag,If-Unmodified-Since,If-Match,If-None-Match)
新增功能认为每台服务器应当存在唯一的IP地址,请求的URL中没有传递主机名虚拟主机允许在同一台服务器中存在多个虚拟主机,并且共享IP,新增host字段,指定服务器的域名

12.HTTP1.1HTTP2.0的区别?

区别HTTP1.1HTTP2.0
二进制协议报文头部是文本,数据体是文本或二进制头与数据体都是二进制
多路复用-复用TCP连接,允许在同一个连接中客户端与服务器同时发送多个请求或响应
数据流-将同一个请求或响应的所有数据包称为数据流,每个数据流有唯一的编号, HTTP2.0在发送数据包时并不是按照顺序发送,同一个连接的连续数据包也可能来自于不同的请求,所以在发送数据包时都标记了数据流的编号以便区分
头信息压缩协议不带状态,每次发送请求都必须附上所有信息头信息压缩后发送,客户端与服务器同时维护同一张头信息表,所有字段均会存入该表,并生成一个索引号,后续发送头信息只需要发送索引号
服务器推送-允许服务器未经请求向客户端发送资源,推送一些必要的信息以减少数据传递时间

13.使用get方法为什么会限制URL长度?

  • HTTP中,并未规定对get方法请求的URL长度进行限制,是浏览器及服务器的限制
  • 浏览器限制
    • IE,限制URL长度为2083字节(min)
    • FireFox,限制URL长度为65536字符
    • Safari,限制URL长度为80000字符
    • Opera,限制URL长度为190000字符
    • Chrome,限制URL长度为8182字符
  • 服务器限制
    • Apache,最大接收URL长度为8192字符
    • Microsoft Internet Infomation Server,最大接收URL长度为16384字符

14.当在浏览器中输入Baidu.com并且按下回车之后发生了什么?

  • 解析URL
    • 根据URL解析出请求的协议以及请求的资源地址,如果协议或者主机名不合法,浏览器将会将输入的内容传递给搜索引擎检索;如果协议及主机名合法,浏览器会将URL中存在的非法字符进行转义
  • 缓存判断
    • 浏览器会判断请求的资源是否在缓存中,如果缓存中的数据未失效,那么浏览器将会直接使用,否则会向服务器发起新的请求
  • DNS解析
    • 获取输入的URL域名的IP地址
    • 浏览器会先判断本地是否缓存有该域名的IP地址,有则直接使用
    • 否则向本地的DNS服务器发起请求,DNS服务器首先会判断本地是否缓存有当前域名的IP地址,有则直接使用
    • 否则向根域名发起请求,获取顶级域名服务器的地址后,再向顶级域名服务器发起请求;然后获取权威域名服务器的地址后,再向权威域名服务器发送请求获取到域名的IP地址
    • 本地DNS服务器将获取到的IP地址返回给请求的用户
  • 获取MAC地址
    • 获取到IP地址后,还需要直到主机的MAC地址
    • 应用层下发数据给传输层,TCP协议会指定源端口号与目的端口号,下发给网络层
    • 网络层将本机地址作为源地址,获取的IP地址作为目的地址,下发给数据链路层
    • 数据链路层的发送需要加入通信双方的MAC信息,本机的MAC信息作为源,目的的MAC地址分情况
      • IP地址与本机的子网掩码相与,能够判断本机与目的主机是否在同一个子网里
      • 若在,通过APR协议直接获取到主机的MAC地址
      • 若不在,请求被转发给网关,并由它代为转发,此时同样可以通过APR协议获取到目的主机的MAC
  • TCP三次握手
    • 客户端向服务端发送一个SYN报文段用来请求连接,同时发送一个随机序号
    • 服务端接收到请求后,向客户端发送一个SYN ACK报文段,确认连接请求,同时发送一个随机序号
    • 客户端接收到服务端应答后,进入连接状态,同时向服务端发送一个ACK确认报文段,服务端收到后也进入连接状态
  • HTTPS握手
    • 如果使用的是HTTPS协议,在正式通信前还存在一个TLS的四次握手过程
      • 客户端向服务端发送协议版本号,一个随机数与加密方法
      • 服务端收到后,确认加密方法,也向客户端发送一个随机数与数字证书
      • 客户端收到后,检查证书是否有效,如果有效,再生成一个随机数,并使用证书中的公钥对随机数加密,然后发送给服务器端,还会提供一个前面所有内容的hash值供服务端进行检验
      • 服务端收到后,利用私钥对数据解密,同时向客户端发送一个前面所有内容的hash值供客户端检验
      • 此时双方都有了三个随机数,按照之前约定的解密方法,用这三个随机数生成一个密钥,后期双方通信前,就使用这个密钥对数据进行加密后再传输
  • 返回数据
    • 服务端接收到客户端发送的请求后,将会返回一个html页面,当浏览器接收到后,开始对页面进行渲染
  • 页面渲染
    • 根据html文件中的文档结构生成一个Dom
    • 根据设置的Css规则生成一个CSSom
    • 如果遇到script标签,则会先检查是否有deferasync属性,否则非异步执行的脚本程序会阻塞页面的解析
    • 根据Dom树与CSSom树构建一个渲染树,浏览器会根据渲染树对页面进行布局,布局完成后调用浏览器的相关接口绘制整个页面
  • TCP四次挥手
    • 客户端向服务端发送断开连接请求
    • 服务端收到后,会告诉应用层需要释放TCP链接,然后向客户端发送ACK包,进入CLOSE_WAIT状态,此时客户端到服务端的链接已经被断开,服务端不再接收客户端发送的数据,但是服务端可以发送数据给客户端,服务端会继续向客户端发送未发送完的数据,完毕后会向客户端发送断开连接请求,然后服务端进入LAST_ACK状态
    • 客户端收到后,会向服务端发送确认应答,此时客户端进入TIME_WAIT状态,该状态会持续2MSL时间,若该时间段内没有接收到服务器的数据,则进入CLOSED状态
    • 服务端收到确认应答后,也进入CLOSED状态

15.对keep-alive的理解?

  • HTTP1.0中,对于客户端的每次请求与服务端的响应,都需要新建一个连接来完成,并且在数据传输完成之后立刻断开连接,这就是短链接
  • 使用keep-alive时,客户端到服务端的连接持续生效,这就避免了在多次请求时会新建连接或者重建链接,减少了建立连接所带来的时延
  • HTTP1.0中,配置头部Connection:keep-alive,如果希望取消Connection:close
  • HTTP1.1中,默认启用了该功能,如果希望取消,配置头部Connection:close
  • keep-alive建立过程
    • 客户端向服务端发送请求报文同时在首部添加发送Connection字段
    • 服务器收到并处理Connection字段
    • 服务器回送Connection:keep-alive字段给客户端
    • 客户端收到Connection字段
    • keep-alive连接建立成功
  • 服务端自动断开过程
    • 客户端向服务端发送请求报文
    • 服务器收到并处理请求
    • 服务器将资源返回给客户端并且关闭连接
    • 客户端接收到资源后,发现没有Connection字段,断开连接
  • 客户端请求断开连接过程
    • 客户端向服务端发送Connection:close字段
    • 服务器收到请求并处理Connection字段
    • 服务器将资源返回给客户端并且关闭连接
    • 客户端接收到资源后关闭连接
优点缺点
更少的CPU使用与内存占用,允许请求与应答的HTTP管线化,降低TCP拥塞,降低了后续的请求时延,报告错误无需关闭TCP连接长时间TCP连接导致系统资源无效占用

16.如果页面有多张图片,HTTP是如何加载图片的?

  • HTTP1.0中,浏览器对同一个域名中最大的TCP链接数为6,如果超过该次数,将会新增请求
    • 可以使用多域名部署解决,可以增加同时请求的数目,加快页面图片的获取速度
  • HTTP2.0中,浏览器通过多路复用机制可以实现在同一个TCP链接中发送多个HTTP请求,可以一次性获取多张图片

17.HTTP2.0中的头部压缩算法是怎样的?

  • 采用HPACK算法,在客户端与服务端建立字典,用索引号表示重复的字符串
    • 在客户端与服务端共同使用同一份首部表,用来存储之前请求与响应中发送的键值对
    • 对于相同的数据,不再发送重复的数据.首部表在HTTP2.0的存续期间一直存在,由客户端与服务端共同维护
    • 每个新的键值对要么会被添加到首部表末尾,要么会覆盖掉已有的数据

18.HTTP请求报文是什么样的?

  • 包含一个请求行
    • 请求行包含请求方法,目标url,协议版本
  • 包含一个请求头
    • 请求头中用来实现请求的具体配置,是一个键值对集合,每个键值对占据一行
  • 包含一个空行
  • 包含一个请求体
    • 请求时所携带的数据

19.HTTP响应报文是什么样的?

  • 包含一个响应行
    • 响应行包含协议版本,状态码,简要描述
  • 包含一个响应头
    • 是一个键值对集合,每个键值对占据一行
  • 包含一个空行
  • 包含一个响应体
    • 根据具体请求响应的数据

20.HTTP的优点与缺点有哪些?

  • HTTP是超文本传输协议,它定义了客户端与服务端之间交换报文的格式与规则,默认使用80端口,使用TCP作为传输层协议
  • 优点
    • 简单快速,请求时只需要传递方法与目标url
    • 无连接,每次连接只处理一个请求,服务器处理完请求,收到客户端应答后断开连接
    • 无状态,如果后续处理需要之前的信息,那么需要重传,但是相反,如果不需要之前的信息,则应答比较快
    • 灵活性强,允许传输任意类型的数据对象,利用content-type设置数据类型
  • 缺点
    • 无状态的协议,不会保存关于用户的任何信息
    • 安全性低,协议中的报文是文本形式,容易直接暴露在外部

21.关于HTTP3.0的理解?

  • HTTP3.0使用UDP协议实现了多路复用数据流,传输可靠性等功能,简称为QUIC协议
    HTTP3.0
  • 流量控制与传输可靠性控制,在UDP基础上额外提供了一层保证数据传送的可靠性,包括:数据重传,拥塞控制等
  • 继承TLS加密功能,并且减少了握手时花费的RTT
  • 多路复用,同一个物理连接可以有多个独立的数据流,实现了数据流的单独传输,解决了TCP的队头拥塞问题
  • 快速握手,基于UDP,可以直接使用0~1RTT来建立连接

22.HTTP的性能如何?

  • HTTP协议基于TCP/IP,使用了请求-应答的通信模式
  • HTTP有两种连接模式:持续连接与非持续连接
    • 持续连接指的是当客户端与服务端成功连接后,TCP的连接状态将会一直保存,可以被多个请求复用
    • 非持续连接指的是服务端必须为每一个请求建立和维护一个全新的连接
  • 管道网络传输
    • HTTP1.1使用持续连接进行通信,可以实现管道网络传输
    • 管道网络传输指的是对于同一个TCP连接,客户端可以发送多个请求,第一个请求发送之后,不必等待响应,可以直接发送后续请求,缩短了请求整体响应的时间,但是如果前面的请求过慢,会阻塞后面的请求
  • 队头堵塞
    • HTTP的报文传输必须是一发一收,但是,其中的任务被放在一个队伍中串行执行,一旦前面的任务处理较慢,就会阻塞后面的任务
    • 解决队头堵塞
      • 并发连接,对于同一个域名,允许分配多个长连接
      • 域名分片,将域名分化成为多个二级域名,均指向同一个服务器

23.与缓存相关的HTTP请求头有哪些?

  • 强缓存
    • expires,cache-control
  • 协商缓存
    • etag,if-none-match,last-modified,if-modified-since

24.详细说明什么是HTTPS协议?

  • HTTPS协议指的是超文本传输安全协议,是一种通过计算机网络进行安全通信的协议
  • HTTPS经由HTTP实现通信,利用SSL/TLS进行加密
  • HTTPS的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性
  • HTTPS安全层的主要作用是在发送HTTP请求时加密信息,在接收HTTP内容时解密信息
HTTPHTTPS
采用明文传输信息,易造成信息泄露,信息篡改,信息劫持等风险采用身份验证,完整性检查,信息加密的方式保护数据

25.TLS/SSL加密的工作原理?

  • TLS/SSL被称为安全传输层协议,是介于TCPHTTP之间的一层安全协议,不影响原有的协议
  • 主要依赖三类基本算法:散列函数hash,对称加密,非对称加密
    • 散列函数hash验证信息的完整性
      • 常见的有MD5,SHA1,SHA256,该函数具有单向不可逆的特点,对输入数据敏感,输出长度固定,任何数据的修改都会改变函数结果,可以用来验证数据的完整性,防止数据被篡改
      • 信息传输过程中,无法实现防止信息被篡改,因为传输作为明文传输,中间人可以修改信息后重新计算信息的摘要,所以需要对传输的信息及信息摘要进行加密
    • 对称加密采用协商的密钥对信息加密
      • 双方使用同一个密钥对信息进行加密与解密
      • 密钥如果通过网络传输,那么容易被窃取,一旦被窃取,那么对称加密就失效了
      • 常见的对称加密方法有AES-CBC,DES,3DES,AES-GCM
      • 信息传输一对一,需要共享相同的密钥,安全的密钥是信息安全的基础,服务器与N个客户端进行通信,就需要维护N个不同的密钥
    • 非对称加密实现身份认证与密钥协商
      • 使用一个公钥与一个私钥,两者分别对信息加密,并且只有对立方才能够解密
      • 将公钥公开,从而使得通信的客户端能够使用公钥加密,服务端使用私钥就能够解密
      • 非对称加密的加密过程较慢,如果每次通信都使用非对称加密,那么会造成等待时间过长的问题
      • 常见的非对称加密方法有:RSA,ECC,DH
      • 采用一对多的方式,服务端拥有一个私钥就可以实现与多个客户端进行通信,使用该私钥可以对客户端使用公钥加密的信息进行解密;服务端使用私钥加密的信息,任何拥有公钥的客户端都能够进行解密
  • TLS/SSL的工作方式
    • 客户端使用非对称加密与服务端进行通信,实现身份的验证并协商对称加密的密钥,对称加密算法采用协商密钥对信息及信息摘要进行加密,不同节点之间采用的对称密钥不同,从而保证信息只能够由通信双方获取

26.数字证书是什么?

  • 使用TLS/SSL加密后也不能够确保信息一定是安全的,如果存在一个中间人,截取了服务端发送的公钥,然后将他的公钥发送给客户端,客户端使用这个公钥对信息进行加密后发送,中间人使用自己的私钥将加密信息解开并模仿客户端的行为,向服务端发送信息,服务端最后会将信息返回给中间人,这样就会导致信息泄漏
  • 为了验证公钥的安全性,可以使用数字证书
    • 使用hash算法对公钥与其他信息加密,生成一个信息摘要,然后让CA机构用它的私钥对消息摘要加密,形成签名,最后将原信息与数字签名进行混合,就是数字证书
    • 当服务端接收到数字证书后,利用hash算法对原信息生成一个摘要,然后使用公证处的公钥对数字证书中的摘要进行解密,最后将解密的摘要与生成的摘要进行对比
  • 只要认证中心可靠,那么就确保信息是安全的,一般在浏览器中都会内置一些顶层的认证中心的证书

27.HTTPS有哪些特点?

  • 优点
    • 可以认证客户端与服务器,将信息发送至正确的客户端与服务器
    • 可以在通信过程中认证身份,加密信息,使得通信更加安全
    • 是目前最安全的解决方案,极大地增加了中间人劫持信息的成本
  • 缺点
    • 需要进行服务端与客户端双方的加密与解密过程,额外耗费时间
    • 使用SSL证书需要收费,功能越强费用越高
    • SSL证书需要绑定IP,不能在同一个IP上绑定多个域名
    • 占用更多的服务器资源,支持访客稍多的网站需要投入更多成本

28.同样作为重定向,302,303,307有什么区别?

  • 302HTTP1.0的重定向状态码
  • HTTP1.1之后,细分出303307两个分支
    • 304表示客户端应通过get请求获取该资源,且会将post请求转变为get请求
    • 307表示会遵照浏览器的标准,不会自动更改请求

29.DNS协议是什么?

  • DNS是域名系统的缩写,提供主机名到对应IP地址的转换服务,即域名系统
  • 它是一个分层的DNS服务器组成的分布式数据库,是定义了主机如何查询该分布式数据库方法的一个应用层协议,方便人们直接通过域名访问网址,而非通过一串IP地址进行访问
  • 它将主机名解析成为对应的IP地址,客户端向DNS服务器发送域名查询请求,DNS服务器告知客户端Web服务器对应的IP地址

30.DNS同时使用了TCP协议与UDP协议吗?

  • DNS服务器默认占用53号端口,同时使用TCPUDP协议
  • 区域传输时使用TCP协议
    • 辅域名服务器会定时向主域名服务器进行查询,了解数据是否存在变动,如果数据有变动,会执行一次区域传送.传送的数据量相比请求而言更加庞大,使用TCP传送保证了数量的准确性
  • 域名解析时使用UDP协议
    • 客户端向DNS服务器查询域名,一般返回的结果不会超过512Byte,使用UDP协议直接传输,不用经过三次握手,DNS服务器负载更低,响应更快

31.DNS完整的查询过程是怎样的?

  • 浏览器会先到缓存中查询是否存在对应的IP地址,如果能够找到,直接使用,否则执行以下步骤:
  • 浏览器 => DNS服务器
    • 将请求发送给本地DNS服务器,如果能够找到,直接使用,否则执行以下步骤:
  • DNS服务器 => 上级域名服务器
    • 本地DNS服务器向根域名服务器发送请求,它会返回一个所查询域的顶级域名服务器地址,本地DNS服务器继续向顶级域名服务器发送请求,接收请求的服务器会查询自己的缓存,如果能够找到,直接使用,否则执行以下步骤:
    • 顶级域名服务器查询到缓存中不存在对应的IP地址,会返回下一级的权威域名服务器地址,本地DNS服务器继续向权威域名服务器发送请求,域名服务器会返回对应的IP地址
  • 本地DNS服务器将查询到的IP地址进行缓存,同时该IP地址发送给服务器

32.什么是迭代查询与递归查询?

  • DNS的查询过程是一个既包含迭代查询又包含递归查询的过程
  • 递归查询指的是用户发送依次请求后,服务器代为向第三方继续发送我们的请求,最终服务器会返回给我们一个查询结果,用户只需要发送一次请求即可
  • 迭代查询指的是用户发送请求后,每次服务器都会返回给我们一个结果,由用户再次向目标服务器发起请求,用户可能需要发送多次请求
  • 通常,在需要使用DNS服务时,浏览器通常会向本地DNS服务器发送一个请求,用来获取目标主机名的IP地址

33.DNS报文是什么?

  • DNS服务器以资源记录的形式存储着多条信息,每一次DNS响应报文一般包含多条资源记录
  • 每条资源记录有一个固定的格式(name,value,type,TTL)
    • TTL是资源记录的生存时间,表示该资源能够被其他DNS服务器缓存多长时间
    • type取值不同,namevalue的取值也不同
      • type=A,name代表主机名,value代表对应的IP地址
      • type=NS,name代表域名,value代表负责当前域名的DNS服务器主机名
      • type=CNAME,name代表别名,value为该主机的规范主机名
        • 该记录用来向查询的主机返回一个该主机名的规范主机名,告诉查询主机查询该主机名的IP地址,别名简化了一些复杂的主机名
      • type=MX,name代表一个邮件服务器的别名,value为邮件服务器的规范主机名,作用与上述一致

34.OSI七层模型是什么?

  • 应用层
    • 应用层最接近用户,为计算机提供应用接口,也为用户直接提供各种网络服务
    • 常见的应用层网络服务协议有:HTTP,HTTPS,FTP,SMTP
  • 表示层
    • 表示层提供各种用于应用层的数据的编码及转换功能,确保一个系统的应用层发送的数据能够被另外的系统识别
    • 在项目开发中,通常使用base64对数据进行编码解码
  • 会话层
    • 会话层负责建立,管理,终止表示层实体之间的通信
    • 该层的通信由不同设备的不同程序之间的服务请求与响应组成
  • 传输层
    • 传输层建立了端到端的连接,其作用是为上层协议提供端到端的可靠和透明的数据传输服务
    • 该层向高层屏蔽了数据传输过程中的细节,让高层用户只看到两个传输实体之间的一条主机到主机的,可由用户设定与控制的,可靠的数据通路
    • TCP/IP在这一层,规定了数据的传输方式
  • 网络层
    • 本层通过IP寻址来建立节点之间的连接,将源端送来的分组,选择合适的路由与交换节点,正确无误地按照地址传输给目的运输层
    • 该层是IP协议层,IP协议是Internet的基础,规定了数据的传输路线
  • 数据链路层
    • 将比特组合成字节,再将字节组合成帧,使用链路层地址访问介质,并进行差错检测
    • 该层可以比作数据的传输路线
  • 物理层
    • 数据信息的传递最终通过物理层实现,利用物理层介质传输比特流
    • 规定了电平,速度与电缆针脚
    • 常用设备you集线器,中继器,调制解调器,网线,双绞线,同轴电缆
  • OSI七层模型利用对等通信,源端每一层都会与目的地对应层各自进行通信

35.什么是TCP/IP五层协议?

  • 应用层
    • 为应用进程提供服务
    • 应用层定义了进程之间进行通信与交互的规则,不同的应用有不同的应用层协议
    • 常见的应用层协议有HTTP,HTTPS,FTP,SMTP,DNS
  • 传输层
    • 负责为两台主机中的进程提供通信服务
    • TCP协议,即传输控制协议,提供面向连接的,可靠的数据传输服务,数据的基本传输单位是报文
    • UDP协议,即用户数据报协议,提供无连接的,尽最大努力的数据传输服务,不保证数据传输的可靠性,数据的基本传输单位是用户数据报
  • 网络层
    • 负责为两台主机提供通信服务,利用合适的路由将源数据传输到目标主机
  • 数据链路层
    • 负责将网络层交下的IP数据报封装成帧,在链路的相邻节点传送帧,每一帧都包含节点与必要的控制信息
  • 物理层
    • 确保数据可以在各种媒介上进行传输
  • TCP/IP协议也遵循对等通信
    TCP/IP对比图

36.TCPUDP的概念?它们分别有什么特点?

  • 两者都是传输层的协议,都属于TCP协议族
  • UDP
    • 面向无连接
      • 无需进行三次握手就能随时发送数据,不会对数据报文进行任何拆分与拼接
      • 在发送端,应用层将数据传递给传输层的UDP协议,UDP只会给数据增加一个UDP头作为标识是UDP信息
      • 在接收端,网络层将数据传递给传输层,传输层去除IP报文头就传递给应用层,不进行任何拼接操作
    • 有单播,多播与广播模式
      • UDP支持一对一,一对多,多对多,多对一的数据传输功能
    • 面向报文
      • 发送方应用程序交下来的数据,UDP不进行数据拼接与拆分,添加首部后直接交给IP层,保留了这些报文的边界,应用程序必须选择合适大小的报文
    • 不可靠性
      • 无连接,随时可以进行数据发送
      • 不会备份数据,不关心接收方是否已经接收到数据
      • 没有拥塞控制,容易造成丢包
    • 头部开销小,数据传输高效
      • UDP头部包含了两个16位端口号:源端口号与目标端口号
      • 整个数据报文的长度
      • 整个数据报文的检验与一个可选的Ipv4字段
      • 只有8字节,相比于TCP至少20字节而言,占用更小空间
    • UDP适用于实时应用,直播,现场会议,语音聊天
  • TCP
    • 面向连接
      • 数据发送之前必须进行三次握手,建立可靠的连接
    • 仅支持单播传输
      • TCP连接只能够连接两个端点,进行端到端的传输
    • 面向字节流
      • 不是以单个报文独立传输,以字节流的方式进行传输,不保留报文边界
    • 可靠传输
      • TCP可以利用段编号以及确认号判断数据是否丢包,误码
      • TCP为了保证报文的可靠,为每一个数据包都添加了一个序号,序号可以保证接收端按序对数据进行接收,接收端接收到数据后,会发送一个相应的确认ACK,如果发送方在合理的时间RTT内没有收到确认,那么该数据宝将会进行重传
    • 提供拥塞控制
      • 当网络出现拥塞时,TCP会减小向网络中注入的数据速率与数量,缓解拥塞
    • 提供全双工通信
      • 允许双方的应用程序在任何时候都能够发送数据,TCP的两端设有缓存,用来临时存储双向通信的数据,TCP可以立即发送数据段,也可以缓存一段时间,一次性发送更多数据段
    • TCP适用于要求高可靠性的场景,文件传输,接收邮件,远程登录

37.为什么UDP协议不可靠?

  • UDP传输数据之前不需要建立连接,远程主机的运输层在接收到UDP报文后,不需要进行确认,提供了不可靠的数据交付
  • 不保证消息交付,不保证交付顺序,不跟踪连接状态,不进行拥塞控制

38.什么是TCP的重传机制?

  • 由于TCP的下层网络层会出现丢失,重复或者失序的情况,TCP为保证数据传输的可靠性,会重传其认为已丢失的包
  • TCP使用两套机制实现数据重传
    • 基于时间
    • 基于确认信息
  • 在每次发送数据时,会自动开启一个定时器,如果在这个时间段内没有收到接收方发送的确认信息ACK,则对该报文进行重传,在达到一定次数还没有成功时,放弃传输,并且发送一个复位信号

39.什么是TCP的拥塞控制机制?

  • 慢启动
    • 数据发送时设置较小的拥塞窗口,测试网络的拥塞程度,由小到大增加拥塞窗口的大小
  • 拥塞避免
    • 在拥塞避免阶段,将拥塞窗口控制为按照线性增长,使网络不容易堵塞
  • 快速重传
    • 要求接收方在收到一个失序的报文段后就立即发出重复确认,发送方只要收到连续三个重复确认,立即重传对方尚未收到的报文段
  • 快速恢复
    • 发送方连续收到三个重复确认时,说明没有出现网络拥塞,此时不执行慢开始,进行相关设置后执行拥塞避免算法

40.什么是TCP的流量控制机制?

  • 流量控制指的是发送方在发送数据包时,避免过快地进行发送,否则接收方来不及接收
  • TCP采用大小可变的滑动窗口进行流量控制,窗口大小的单位是字节,窗口大小即每次传输数据的大小
  • 建立连接时,两端分别分配一个缓冲区保存输入的数据,并将缓冲区的大小发送给另外一端,数据到达时,接收方发送确认ACK,其中包含自己剩余缓冲区的大小,剩余缓冲区空间大小称为窗口,发送剩余窗口大小的行为成为窗口通告
  • 如果接收方应用程序读取数据的速度与数据到达的速度一样快,接收方将在每个确认ACK中发送一个正的窗口通告
  • 如果发送方数据发送速度快于接收方,接收到的数据最终将充满接收方的缓冲区,接收方会发送一个零窗口通告,此时发送方必须停止发送

41.什么是TCP的可靠传输机制?

  • 基于连续ARQ协议与滑动窗口协议
  • TCP协议在发送方维持了一个发送窗口
    • 发送窗口以前的报文段,已经发送并经过确认
    • 发送窗口中包含了已经发送但尚未确认的报文段,已经允许但尚未发送的报文段
    • 发送窗口以后的报文段,缓存中还未允许发送
  • 当发送方发送报文时,会依次发送发送窗口内的所有报文段,同时设置一个定时器,如果在定时器的时间内收到某个报文段的确认回答,则滑动窗口,将窗口的首部向后滑动到确认报文段的下一个位置
    • 如果还有已发送但尚未确认的报文段,则重置定时器
    • 如果没有,关闭定时器
    • 如果定时器超时,重新发送所有已发送但尚未确认的报文段,并设置超时时间为原先的两倍
  • 当发送方接收到三个冗余的确认应答后,表明该报文段之后的信息可能丢失,发送方会启用快速重传机制,在当前定时器结束前,发送所有已发送但确认的报文段
  • 接收方使用累计确认机制,所有按序到达的报文段,接收方返回一个报文段的肯定回答,如果收到了一个乱序的报文段,接收方直接丢弃,并返回一个最近按序到达报文段的肯定回答
    • 累计确认保证了返回的确认回答之前的报文段都成功按序到达,发送窗口可以移向已发送并确认的报文段的下一位
  • 发送和窗口的大小可以变化,由接收窗口剩余大小和网络中的拥塞程度决定,TCP通过控制发送窗口的长度进而控制发送报文段的速率
    • TCP协议并非与滑动窗口协议一致,许多TCP的实现会将失序的报文段缓存,发生重传时,只会重传一个报文段,TCP协议可靠传输机制是滑动窗口协议与选择重传协议的一个混合体

42.什么是TCP粘包?如何处理?

  • 一般情况下,TCP会启用延迟算法Nagle,在发送数据之前将数据缓存.如果短时间有多个数据包发送,这些数据包会被缓存到一起集中发送
  • 如果是文件传输,不用处理粘包,将多个数据包互相拼接即可
  • 如果是多条消息或别的数据,需要处理粘包
  • 假如服务端连续发送两个数据包data1data2
    1. 客户端接收到完整的data1,再接收到完整的data2
    2. 客户端接收到完整的data1与部分的data2,再接收到data2的剩余数据
    3. 客户端接收到部分的data1数据,再接收到data1的剩余数据与完整的data2
    4. 客户端一次性接收到完整的data1data2
    • 上述的234是数据粘包的情况
  • 解决方案
    • 多次发送数据包之前设定一个等待时间,等待时间之后进行下一次数据发送,适用于交互频率非常低的情景
    • 关闭延迟算法Nagle,不启用缓存区,每次发送数据包不缓存直接进行发送,适用于单次发送数据量较大并且频率不是非常高的情景;该方法不适用于网络较差的情况
    • 进行封包于拆包,在每个数据包发送之前,在它前后放一些有特征的数据,接收方收到数据包时根据特征数据分割数据包

43.为什么UDP不会粘包?

  • TCP协议是面向流的协议,UDP协议是面向消息的协议
  • UDP数据包都是一条消息,应用程序必须以消息为单位提取数据,无法一次提取任意字节的数据
  • UDP具有消息边界保护机制,在每个UDP中有消息头,对于接收端来说容易区分每条消息
  • UDP传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息,接收端一次只能接收发送端发出的一个数据包,如果一次接收数据包大小小于发送的数据包大小,会造成部分数据丢失,但是不会再次接收

44.什么是WebSocket?

  • WebSocketHTML5中实现来的一种浏览器与服务器之间进行全双工通信的网络技术,是应用层的协议,基于TCP协议,复用HTTP的握手通道
  • 浏览器只需要与服务器进行一次握手,两者就可以建立持久的连接用来进行双向数据传输
  • WebSocket技术的出现解决了半双工通信的弊端
  • 使用WebSocket服务后,服务端可以向客户端主动推送消息,客户端也可以向服务端主动推送消息
  • 实现原理
    • 客户端向WebSocket服务器通知一个带有所有接收者ID的事件,服务器接收后立即通知所有活跃的客户端,只有ID在接收者ID序列中的客户端才会处理该事件
  • 特点
    • 支持双向通信,实时性强
    • 可以发送文本与二进制数据
    • 基于TCP协议,服务端的实现比较容易
    • 数据格式轻量化,性能开销小,通信高效
    • 没有同源限制,客户端可以与任意服务端通信
    • 协议标识符为ws,加密协议为wss,服务器网址就是URL
    • 兼容HTTP协议,默认端口也是80443,握手阶段采用HTTP协议,握手时不容易被屏蔽

45.如何实现即时通讯?短轮询,长轮询,长连接SSE,WebSocket有什么区别?

  • 短轮询与长轮询的目的是用于实现客户端与服务端的即时通讯
  • 短轮询
    • 浏览器每隔一段时间都会向服务端发送请求,服务端收到请求后,无论是否有数据更新都进行响应
    • 通过客户端不断地向服务端发送请求,模拟实时收到服务端数据的变化
    • 方式简单,易于理解,但是由于需要不断地建立HTTP连接,浪费了服务端与客户端的资源,如果用户数量过多,会严重增加服务器的压力
  • 长轮询
    • 客户端向服务端发送请求,服务端接收到请求后不会立即进行响应,服务端先将该请求挂起,并判断请求的数据是否有更新,如果有更新,将更新后的数据进行响应,如果长时间没有更新,则直到设定的限制时间到期后进行响应
    • 客户端接收到响应的数据后,再次发送请求重新建立连接要求通信
    • 长轮询减少了不必要的HTTP请求次数,节约了资源,但是连接挂起也会导致资源的浪费.
  • SSE
    • 服务器使用流传输向客户端推送信息
    • 服务端向客户端声明,接下来发送的是流信息,表示发送的信息不是一次性的数据包,而是一个数据流,会持续不断地进行发送,因此,客户端不会关闭连接,会一直等待服务器发送新的数据流
    • 基于HTTP协议,它不需要建立过多的HTTP请求,节约了资源
  • WebSocket
    • HTML5定义的一个新的协议,是一个全双工的协议,允许客户端与服务端互相平等地通信,即允许服务端主动向客户端发送信息,也允许客户端向服务端主动发送信息
    • 不同于SSE的单向主动通信,只允许服务端主动向客户端发送信息,如果客户端需要发送一个信息给服务端,则需要另外请求
  • 短轮询,长轮询与SSE都是基于HTTP协议
  • 性能上,WebSocket>SSE>长轮询>短轮询
  • 考虑兼容性,短轮询>长轮询>SSE>WebSocket
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Midshar.top

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值