秋招前端面经总结-3-计算机网络相关

1. HTTP协议(HTTP1.1)

HTTP:超文本传输协议,是建立在TCP之上的一种无状态协议。大致工作流程为:

  • 客户端发送一个HTTP请求,通过TCP协议传送到服务器端
  • 服务器端收到请求后,开始处理请求,做出相应的动作,返回HTTP响应
HTTP请求:

由请求行、请求头、空行、请求体组成。

  • 请求行:请求方法 请求路径 http协议版本
  • 请求头:cookie/Content-Length/Accept-Encoding/Connection等头字段
  • 空行:告诉服务器请求头部到此为止。
  • 请求体:POST方法的话会将请求数据放到请求体中,GET请求时请求体为空。
常用的请求方法:
  • GET 用来请求指定的资源,应只是检索,不会对数据造成影响
    • GET请求可缓存
    • 可以在浏览器历史记录中查找到
    • 可收藏至书签
  • POST 向指定资源提交数据进行处理,可能会导致新的资源建立或已有资源的修改
    • POST请求不会被缓存
    • 无法从浏览器记录中查找到
  • HEAD 类似于GET请求,只不过返回的响应中没有响应体,用于获取响应头
  • PUT 从客户端向服务器传送的数据取代指定的文档的内容。
  • DELETE 请求服务器删除指定的资源
  • OPTIONS 允许客户端查看服务器的性能。
  • TRACE 回显服务器收到的请求,主要用于测试或诊断。
GET和POST的区别
  • 提交数据的形式不同
    • GET请求的数据附在URL之后,以?分割URL和数据,参数之间用&相连
    • POST将数据放到请求体中
  • 提交数据的大小
    • GET提交方式影响了URL的长度。本身HTTP规范对于URL长度没有限制,主要取决于不同客户端、服务器的支持。
    • POST方式提交的数据没有限制
  • 提交数据的安全
    • POST比GET的安全性要高一些
    • GET提交数据用户名和密码将明文出现在URL上
      • 页面可能被浏览器缓存
      • 可以查看浏览器的历史记录
  • POST比GET请求要慢
    • POST请求会先将请求头发送给服务器进行确认(服务器返回100 Continue),然后才真正发送数据
    • POST包含更多的请求头(描述body的数据)
HTTP响应:

由响应行、响应头、响应体组成。

  • 响应行:协议版本 状态码 状态描述(HTTP/1.1 200 OK)
  • 响应头:描述服务器的基本信息(Expires/Set-Cookie/Content-Type/Allow(用于枚举资源所支持的 HTTP 方法的集合)等字段)
  • 响应体:响应的数据;可以是纯数据、HTML代码、JS代码等。
常用的状态码:
  • 1xx:表示成功接收请求,需要客户端继续提交下一次请求才能完成整个过程
    • 100 Continue 继续,客户端应该继续其请求
    • 101 Switching Protocols 切换协议,服务器根据客户端的请求切换协议
  • 2xx:表示成功接收请求并完成整个处理过程
    • 200 OK 请求成功
    • 204 No Content 服务器成功处理,但未返回内容
  • 3xx:为了完成请求,需要客户端进一步细化请求。
    • 301 Moved Permanently 永久移动,返回信息会包含新的URI,浏览器自动定向至新的URI
    • 302 Found 只是临时移动,客户端应继续使用原有URI
    • 304 Not Modified 未修改,此时服务器不会返回任何资源,客户端使用缓存
  • 4xx:客户端请求有误
    • 400 Bad Request 客户端请求的语法有误
    • 403 Forbidden 服务器拒绝执行该请求
    • 404 Not Found 服务器找不到该资源
  • 5xx:服务器端出现错误
    • 500 Internal Server Error 服务器内部错误
HTTP1.1支持长连接,长连接与短连接的区别:
  • 长连接:cleict与server连接建立后不断开,这种方式下通讯连接一直存在。
    • 完成一次读写操作之后,连接不会主动关闭,后续还会使用这个连接。
    • 用于操作频繁、点对点通讯、连接数不能太多的情况
    • 例如数据库的连接
    • 通过Content-Length或分块传输的chunked编码(最后有一个空chunked块)来判断一次数据传输结束
  • 短连接:client与server进行一次数据传输时才会建立连接,传输完毕后立即断开连接。
    • 例如web的HTTP服务

HTTP/1.1中默认开启长连接,关闭采用:Connection: close。 HTTP/1.0默认关闭,开启采用:Connection: Keep-Alive

URL编码:
  • escape/unescape:对ASCII字符编码,使用%加上两位16进制,对于Unicode字符,使用%uxxxx。
  • encodeURI/decodeURI:对于Unicode,采用UTF-8进行编码,再百分号编码。
  • encodeURIComponent/decodeURIComponent

2. HTTPS

通过计算机网络进行安全通信的传输协议。利用SSL/TLS加密数据包,目的是提供对网站服务器的身份认证,保护数据的隐私及完整性。

HTTPS的特点:
  • 混合加密:HTTPS是集对称加密和非对称加密为一体的加密过程
    • 对称加密:需要协商加密的秘钥。使用非对称加密对协商秘钥的过程进行加密。
    • 非对称加密:公钥和私钥(私钥只有一个人有)
      在这里插入图片描述
  • 验证身份:保证公钥的正确性(SSL证书)
    • 实现数字签名
      • 对信息M进行HASH函数处理,生成摘要H
      • 使用私钥对摘要H进行加密获取数字签名S,发送{M, S}
    • 验证数字签名
      • 对接收到的M进行HASH处理,生成摘要H1
      • 使用公钥解密签名S获得H
      • 比较H和H1

3. 浏览器缓存

根据是否需要向浏览器重新发起HTTP请求将缓存分为强缓存和协商缓存。

  • 强缓存:不会向服务器发送请求,直接从缓存中取数据。该请求返回的状态码为 200 from cache。
    • 设置两个HTTP Header字段:Expires/Cache-Control
    • Expires 指定缓存过期时间,是服务器端的具体的时间。
    • Cache-Control:控制网页缓存
      • public 响应可以被客户端和代理服务器缓存
      • private 响应只可以被客户端缓存。是默认值
      • max-age 表示最大过期时间(从响应正确回来开始计算)
      • no-store 不缓存任何响应
      • no-cache 资源被缓存但是立即失效,需要发请求确认协商缓存是否生效
  • 协商缓存:强缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器来判断是否使用缓存。相关的状态码是 304 Not Modified
  • Last-Modified/If-Modified-Since:时间是秒为单位,如果修改的频率太高,无法精准记录
  • ETag/If-None-Match:ETag是服务器生成的当前资源的唯一标识,资源变化会重新生成。

4. TCP协议

  • 为什么需要三次握手?

    • 为了防止已失效的连接请求报文突然又传送到了服务端,从而产生错误
    • 也有可能服务端的ACK报文由于网络原因并没有收到。这时服务器傻傻等着,造成资源浪费
      在这里插入图片描述
  • 为什么TIME_WAIT状态需要经过2MSL才能回到CLOSE状态?

    • TIME_WAIT状态是用来重发可能丢失的ACK报文
    • Server如果没有收到ACK,会不断重复的发送FIN
    • CLient如果在2MSL的时间里没有收到FIN,则结束TCP连接
  • 为什么是三次握手,挥手却要四次?

    • server端收到client的SYN请求之后,可以直接发送SYN+ACK。ACK用来应答,SYN用来同步
    • server收到FIN报文时,可能不能立即关闭SOCKET,只能先回复一个ACK报文。等到server数据传送完成之后再发送FIN报文
  • TCP连接建立之后,客户端故障了怎么处理?

    • TCP设置一个计时器,每收到一个请求就重新复位这个定时器
    • 计时结束,服务器仍未收到客户端的数据,则会发送探测报文段,最多发送10个。仍无应答之后会关闭连接

5. 从输入一个URL到加载整个网页的过程?

  • 域名解析:将输入的网址解析为IP地址。DNS解析是一个递归查询的过程。
    • 先在本地域名服务器中查询IP地址
    • 本地域名服务器向根域名服务器发送请求
    • 本地域名服务器向顶级域名服务器发送请求
    • 本地域名服务器向二级域名服务器发送请求直至找到IP地址返回给本地域名服务器
  • TCP连接:三次握手建立TCP连接
  • 浏览器发送HTTP请求
  • 服务器处理HTTP请求,返回HTTP响应
  • 浏览器页面渲染
    • 构建DOM树和CSSOM树
    • 构建渲染树
    • 布局(定位)页面元素
    • 绘制页面元素
  • 四次挥手,断开TCP连接

6. TCP和UDP的区别

TCP/UDP是传输层常用的两个协议。

TCP 可靠连接、面向字节流

优点:

  • 三次握手建立连接
  • 数据传递时,有确认、超时重传、拥塞机制等
    • 确认应答机制 & 序列号(ACK SYN)
    • 超时重传 & 序列号
      • 数据丢失,超时未收到确认则会重传该数据
      • ACK丢失造成的重传会根据序列号确认是否有重复的包
      • 拥塞控制(拥塞窗口):防止过多的数据注入网络中
        • 慢开始:由小到大逐渐增大发送窗口,指数增大(慢启动门限)
        • 拥塞避免:发送窗口线性增长。无论是慢启动算法还是拥塞避免算法,只要判断网络出现拥塞,就要把慢启动开始门限设置为发送窗口的一半(>=2),cwnd设置为1,然后再使用慢启动算法。
        • 快重传:收到一个失序的报文段后立刻发出重复确认
        • 快恢复:收到3个重复确认之后慢启动门限减半;执行拥塞避免算法
      • 流量控制:控制发送端发送数据的速率
  • 数据结束后断开连接节约资源

缺点:

  • 慢、效率低
  • 占用系统资源高
UDP 不可靠、非连接
  • 无连接,发送数据前不需要建立连接
  • UDP不保证可靠交付
  • UDP面向报文

7. cache-control头字段

  • 请求头中使用cache-control
    • no-cache 告知代理服务器不直接使用缓存,需要向原服务器发起请求
    • no-store 所有内容都不会被保存到缓存
    • max-age = age 告知服务器客户端想要接收一个存在时间不大于age的资源
    • max-stale 告知服务器客户端愿意接受一个超过缓存时间的资源。可以使用过期的缓存
    • min-fresh 告知服务器客户端希望接收一个在小于seconds秒被更新过的资源
  • 响应头字段中的cache-control
    • public 任何情况下都得缓存该资源
    • private 返回数据只能被某些用户做缓存。一般是发起请求的浏览器才能使用返回数据的缓存
    • no-cache 不直接使用缓存,要求向服务器发起请求(新鲜度校验)
    • no-store 所有内容都不会被缓存
    • max-age 告知客户端该资源在age秒内是新鲜的,不需要向服务器发请求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值