计算机网络面试八股文攻略(三)—— HTTP协议

一、基础信息

1.1 基本概念

Http 是一种基于明文的超文本传输协议。
而HTTPS协议是在HTTP协议上传输数据时加入了加密机制。

下面,将根据 HTTP 协议的联通到结束的流程进行讲解。

二、 用户身份的识别

通过 Cookie ,Session 或 Token 实现。

2.1 Cookie

是客户端存储用户信息的一种方式,它是一个包含键值对的小型数据,存储在浏览器的存储空间中。例如我们可以使用document.cookie来设置和读取Cookie。Cookie可以用来存储用户的身份验证信息等。但是Cookie操作需要注意安全性,防止被恶意修改。

2.2 Session

是服务器端用来记录用户状态的一种方式,存储在服务器的内存或磁盘上。当用户第一次访问服务器时,服务端会为其创建一个Session,并给这个Session分配一个唯一的Session ID。通过这个Session ID,服务器可以识别用户,同时在Session中存储用户信息。Session相较于Cookie更加安全,但是也会占用服务器资源。

2.3 Token

是一种基于令牌的身份验证方式,通常使用加密算法来生成令牌,令牌存储在客户端。例如JSON Web Token (JWT)。JWT是一种自包含的数据结构,可以在令牌中包含用户信息、token的有效期等。当用户在客户端进行身份验证时,服务器会生成一个Token提供给客户端,在随后的操作中,客户端会携带这个Token去访问服务器来获取或操作资源。

2.4 小结

总结来说,Cookie适用于简单的用户身份验证,Session适用于对于多个页面的访问需要持久化的应用,Token适用于基于令牌的身份验证等场景。

三、 连接

3.1 单向认证和双向认证

单向认证

概念:客户端要求服务端发送数字证书来验证
过程:

  1. 客户端向服务端发送HTTP请求。
  2. 服务端会将自己的数字证书发送给客户端。
  3. 客户端接收到服务端的数字证书后,会验证证书的有效性,包括证书的签名、数字证书颁发机构等信息。
  4. 如果验证通过,则客户端认为服务端是可信的,继续进行后续操作,否则认为服务端不可信,终止操作。
双向认证

概念:双方都要求数字证书来进行认证
过程:

  1. 客户端向服务端发送HTTP请求。
  2. 服务端会将自己的数字证书发送给客户端。
  3. 客户端接收到服务端的数字证书后,会验证证书的有效性,包括证书的签名、数字证书颁发机构等信息。
  4. 如果验证通过,则客户端会发送自己的数字证书给服务端。
  5. 服务端接收到客户端的数字证书后,会验证证书的有效性。
  6. 如果验证通过,则服务端认为客户端是可信的,继续进行后续操作,否则认为客户端不可信,终止操作。

3.2 长连接和短连接

概念:

长连接:

客户端和服务端建立连接后不进行断开,之后客户端再次访问这个服务器上的内容时,继续使用这一条连接通道。
在 HTTP 1.1 后开始支持
响应头加入这行代码:
Connection:keep-alive

短连接:

客户端和服务端建立连接,发送完数据后立马断开连接。下次要取数据,需要再次建立连接。

四、加密

加密实际上是只有 HTTPs 上会进行的,但按流程讲就顺便讲了。

4.1 加密算法

  • 对称加密
    发送接收方共用一个密钥进行加密解密
  • 非对称加密
    生成一个公钥和一个私钥,将公钥发给对方,对方用公钥加密,发过来的信息可以用自己的私钥解密
  • MD5 算法
    对信息生成一个 128 bits 的字符串
  • RSA 算法
    非对称加密,同时做到加密和数字签名。
    将两个大素数相乘,乘积作为公开密钥(难以因式分解
  • DES算法
    对称加密,每 64 位数加密一次,公开加密算法,密钥有 56 位,要穷举密钥的次数很大

4.2 HTTPS 的加密

处理逻辑:

HTTPS是在HTTP协议的基础上加入了SSL/TLS协议,使用SSL/TLS协议来进行数据加密和身份认证。SSL/TLS协议可分为两个层次:记录协议和握手协议。两个协议之间的通信都是通过SSL会话密钥来实现的,SSL会话密钥是通过SSL握手协议协商产生的。
握手协议负责构建安全的通信连接。
记录协议负责对HTTP请求和响应进行加密和压缩

握手协议
  1. 客户端发送SSL握手请求到服务端,请求建立一个SSL/TLS连接。
  2. 服务端收到握手请求后,会回复一个SSL握手响应,包含服务端的数字证书等信息。
  3. 客户端收到握手响应后,会验证证书的有效性并向服务端发送一份随机数。
  4. 服务端接收到随机数后,会使用自己的私钥对这个随机数进行加密,并发送给客户端。
  5. 客户端接收到加密后的随机数后,使用服务端的公钥进行解密。
  6. 客户端和服务端根据随机数计算出会话密钥,用于后续的数据加密和解密。会话密钥只在SSL会话期间有效,并随着SSL会话的结束而失效。
记录协议
作用:

确保数据的机密性,完整性。并对数据进行压缩与分片。

实现
  • 加密:主要采用对称加密算法(如 AES, DES 等)实现。因为对称加密速度快,效率高,安全性好。
  • 完整性:通过 MAC(Message Authentication Code)实现。MAC 就是对数据进行计算,和预定的值进行比较得到。
  • 压缩:算法为 Deflate、Gzip等。将数据进行压缩以减少传输的数据量,提高传输效率。
  • 分片:协议会在每个数据段的头部信息中记录数据的长度信息,以保证接收方能够完整地接收到数据。

五、 状态码

请求发送后,会收到一个返回的状态码,根据状态码能判断请求的状态。

5.1 种类

  • 1xx:信息,服务器收到请求,需要请求者继续操作
  • 2xx:成功,操作已接收
  • 3xx:重定向,需要进一步操作以完成请求
  • 4xx:客户端错误,请求包含语法错误或无法完成请求
  • 5xx:服务器错误,服务器在处理请求的过程中发生了错误

5.2 常见状态码

  • 100 Continue:客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝

  • 101 Switching Protocols:服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。

  • 102 Processing:处理将被继续执行。

  • 200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。

  • 201 Created:请求已经被实现,而且有一个新的资源已经依据请求的需要而建立

  • 202 Accepted:服务器已接受请求,但尚未处理。

  • 300 Multiple Choices:被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息

  • 301 Moved Permanently:被请求的资源已永久移动到新位置

  • 302 Move Temporarily:请求的资源临时从不同的 URI响应请求。客户端应当继续向原有地址发送以后的请求。

  • 400 Bad Request
    1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
    2、请求参数有误。

  • 401 Unauthorized:当前请求需要用户验证。

  • 404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现

  • 500 Internal Server Error:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

  • 501 Not Implemented:服务器不支持当前请求所需要的某个功能。

六、HTTP 协议的版本

6.1 HTTP 1.0 与 1.1 的区别

  1. 缓存处理
    1.0:服务器在第一次发送请求所需的文件时会附带一个过期时间 Expires 和最新修改时间 Last-Modified,时间范围内直接使用缓存
    1.1:新增了一个 Etag 标记,即文件内容唯一对比标记,查看时请求服务器看看是否相同,相同则使用缓存,优先级较高。HTTP1.1 可以通过(If-Modified-Since)的请求头来检查资源文件是否有更新。如果资源文件未进行更改则返回304状态码,否则返回完整的资源文件。这样可以减少带宽消耗,提高了访问速度。

  2. 连接
    HTTP 1.0中默认使用短连接(一次TCP连接只处理一个请求),每次请求都要重新建立TCP连接,这样会加大服务器压力,降低整体的访问效率。
    HTTP 1.1默认启用长连接(Keep-Alive),通过控制TCP连接的重用,在同一TCP连接中可以串行传输多个请求和响应报文,降低了连接建立和关闭的时间和带宽消耗,提高了性能。

  3. Host头处理
    在HTTP 1.0中,并没有规定如何处理没有指定Host头的请求,从而会产生误解和不必要的错误。而HTTP 1.1协议明确规定了每个请求都必须包含Host头信息,以便服务端能够识别出请求的目标域名。

6.2 HTTP 1.1 与 2.0 的区别

  1. 多路复用
    1.1 版本中一个连接中每次只能发送一个请求。而HTTP 2.0可以在一个连接中同时处理多个请求和响应,提高了并发性。
  2. 二进制分帧
    HTTP 1.1使用文本格式传输数据,不太适合处理大量数据和二进制数据;而HTTP 2.0使用二进制格式对数据进行分帧,数据传输更加高效。
  3. 服务器推送
    HTTP 1.1需要客户端先发送请求才能得到响应,无法主动推送数据;而HTTP 2.0支持服务器主动推送数据给客户端,提高了实时性和性能。
  4. 首部压缩
    HTTP 1.1每次请求和响应都要携带大量的头信息,占用了首部很大的带宽;而HTTP 2.0使用了首部压缩的技术,可以将首部减小到原来的五分之一左右,减少了带宽占用。

6.3 HTTP 2.0 与 3.0 的区别

  1. 传输层协议
    HTTP/2基于TCP协议,而HTTP/3基于 google 的QUIC协议,QUIC是一个基于UDP传输协议的快速安全协议,其设计的目的是加速Web传输并解决TCP瓶颈问题。减少了 tcp 三次握手的时间及 tls 加密所需时间。并优化了重传策略,重传包和原包编号不同,降低计算消耗
    特性
  • 链接耗时更短
  • 拥塞控制更出色
  • 更好的多路复用
  • 前向纠错特性
  • 链接迁移特性
  1. 传输方式
    HTTP/2通过多路复用技术实现同时处理多个请求和响应,但必须在TCP连接中完成所有请求和响应;而HTTP/3在QUIC的支持下,可以使用多个独立的传输流来处理请求和响应,提高了并行处理能力和实时性能。

  2. 异常处理机制
    在HTTP/2中,如果出现丢包,会导致TCP拥塞控制机制锁定连接,影响整体性能;而在HTTP/3中,由于QUIC协议使用了自定义的流控机制和拥塞控制规则,所以在网络丢包情况下会更加健壮。

  3. 首字节阻塞
    HTTP/2存在一个称为"首字节阻塞"的问题,即必须等到前一个请求的响应全部接收完毕才能开始下一个请求;而HTTP/3通过多个独立的传输流,避免了"头阻塞"问题,提高了多请求并发处理能力和实时性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值