8月更文挑战 | 前端计算机网络面试题汇总(HTTP与HTTPS)

327 阅读4分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

1.HTTP与HTTPS的区别

方面HTTPHTTPS
URLhttp://https://
安全性不安全安全
端口80443
工作工作在应用层安全传输机制工作在传输层
加密无法加密对传输数据进行加密
证书无需证书需要SSL证书

2.HTTP 1.0/1.1/2.0的区别

1.HTTP 1.0

  • 可发送任意类型的数据
  • 方法:GETPOSTHEAD三种请求方法
  • 长连接
  • 有较多请求头标识,其中,以head中的Last-ModifiedIf-Modified-SinceExpires作为缓存标识

2.HTTP 1.1

  • 引入更多的请求方法:PUTDELETPATCHOPTIONCONNECTTRACE
  • 引入长连接TCP连接默认不关闭,可被多个请求复用,通过connection:keep-alive设置
  • 引入Cache-ControlETag/If-None-Match缓存头标识
  • 引入range请求头标识,支持断点续传
  • 使用虚拟网络,多个虚拟主机共享一个地址
  • 新增24个状态码

缺点:连接缓慢、存在请求队头阻塞问题(因为请求是按顺序进行的,某个请求时间较长会产生阻塞)

3.HTTP 2.0

新特性:

  • 使用了新的二进制协议
  • 多路复用机制(多个请求可在同一个TCP连接上进行)
  • 头部压缩,使用HPACK算法
  • 服务端推送

缺点:

  • 进行TLS传输时,多了一个握手过程,导致连接建立延时
  • 没有彻底解决队头阻塞问题。多个请求跑在一个TCP管道中,一旦HTTP2.0出现丢包,则整个TCP都需要进行重传,该TCP管道中的所有请求均会遭到阻塞

4.HTTP报文

HTTP报文由请求报文以及响应报文组成

请求报文:

组成结构:

  • 请求行:请求方法请求URI协议版本
  • 请求头:各种请求的配置
  • 空行
  • 请求体:请求的参数

响应报文:

组成结构:

  • 状态行:协议版本请求状态码状态码英文名称
  • 响应头:通用头部响应头部实体头部
  • 空行
  • 响应体:服务器返回的数据主体

5.HTTPS 对称加密 非对称加密 混合加密

工作原理:

  • HTTP请求服务端生成证书,客户端对证书的有效期合法性域名一致性证书公钥(RSA加密)进行校验
  • 校验通过,客户端生成随机数并使用公钥进行加密
  • 产生消息体后,对消息体摘要进行MD5(或SHA1)加密,即形成RSA签名
  • 将签名发送给服务端,服务端使用RSA私钥进行解密
  • 解密后得到的随机数使用AES加密,作为密钥(此时该密钥仅有客户端服务端清楚)

可以知道,HTTPS采用混合加密方式:对称加密+非对称加密

对称加密与非对称加密:

简单来说:

  • 对称加密:用什么密钥加密,就用什么密钥解密,一旦密钥泄漏,那么获得密钥的人就可以随意加解密
  • 非对称加密:有两部分,公钥和私钥,公钥用来加密,私钥用来解密(因此私钥一定要保证不被泄漏),在速度方面比对称加密要差(注意:用私钥进行加密的数据,也可以用公钥进行解密

混合加密:

这里贴一张图,十分清楚,来源:

image.png

这里先设定:密钥A(对称加密),密钥B(非对称加密公钥),密钥C(非对称加密私钥),其中,密钥C存在于服务端,密钥A、B存在于客户端,步骤如下:

  1. 发送请求前,客户端将数据使用密钥A加密,加密得到的数据发送给服务端
  2. 随后,客户端使用密钥B密钥A进行加密,仅有密钥C才能解密密钥A
  3. 客户端将密钥B进行加密后得到的数据发送给服务端
  4. 这时,服务端得到了两个数据:加密后的数据+加密后的密钥
  5. 服务端使用密钥C私钥)进行解密,获得了密钥A,最后利用密钥A服务端进行解密获得了数据

其中:解密数据的密钥A被公钥给加密,如果别人没有私钥,即便获取到了加密的数据也无法解密。同理,没有密钥A,即便获取到了加密的数据,也无法进行解密

6.一次完整HTTP请求所经历的步骤

  1. 建立TCP连接
  2. 发送请求行
  3. 发送请求头
  4. 服务器发送状态行
  5. 服务器发送响应头
  6. 服务器发送数据
  7. 断开TCP连接