Skip to main content

HTTP 原理

1、 浏览器缓存

Created by: zobor zhang Created time: March 20, 2024 8:31 AM Tags: http

1.1、 一张图

1.2、 强制缓存

浏览器的强制缓存由 HTTP 响应头中的两个字段控制:

  • Expires: 表示资源的过期时间,是一个绝对时间值。
  • Cache-Control: 这是一个更复杂的字段,可以包含多个指令,其中 max-age 指令表示资源的过期时间,是一个相对时间值。

以下是一些示例:

  • Expires: Thu, 20 Mar 2024 20:00:00 GMT

    表示资源将在 2024 年 3 月 20 日 20:00:00 GMT 过期。在此之前,浏览器会直接使用缓存的资源。

  • Cache-Control: max-age=3600

    表示资源将在 3600 秒后过期。在此之前,浏览器会直接使用缓存的资源。

  • Cache-Control: no-cache

    表示浏览器永远不会缓存该资源。

1.2.1、 Cache-Control

Cache-Control 的常见值及其用途如下:

  • public: 表示所有缓存服务器都可以缓存该资源。
  • private: 表示只有原始服务器可以缓存该资源。
  • no-cache: 表示缓存服务器必须在每次请求时向原始服务器发送请求,以验证资源是否已更新。
  • max-age: 表示资源的缓存时间,以秒为单位。
  • s-maxage: 与 max-age 相同,但仅适用于共享缓存。
  • must-revalidate: 表示缓存服务器必须在每次使用缓存资源之前向原始服务器发送请求,以验证资源是否已更新。
  • proxy-revalidate: 与 must-revalidate 相同,但仅适用于代理缓存。
  • no-store: 表示缓存服务器不能存储该资源。

1.2.2、 Cache-Control 与 Expires 对比

Cache-ControlExpires 都是 HTTP 协议中的头部字段,用于控制缓存行为。它们之间存在一些关键差异:

1. 语法

  • Cache-Control: 是 HTTP/1.1 中引入的,语法更为灵活,支持多种指令。
  • Expires: 是 HTTP/1.0 中定义的,语法相对简单,只支持指定过期时间。

2. 时间格式

  • Cache-Control: 可以使用 max-age 指令指定相对时间(以秒为单位),也可以使用 s-maxage 指令指定绝对时间(以日期时间格式表示)。
  • Expires: 只支持使用绝对时间格式。

3. 优先级

  • Cache-Control: 优先级高于 Expires。如果同时存在这两个头部字段,则浏览器会优先使用 Cache-Control 中的指示。
  • Expires: 如果 Cache-Control 不存在,则浏览器会使用 Expires 中的指示。

4. 其他区别

  • Cache-Control: 支持 publicprivate 等指令,可以更细粒度地控制缓存行为。
  • Expires: 不支持这些指令。

总结:

  • Cache-Control 是更现代、更灵活的缓存控制机制。
  • Expires 可以作为 Cache-Control 的补充,在某些情况下仍然有用。

1.3、 协商缓存


2、 https2 有哪些改进之处

HTTPS2 是 HTTP 协议的第二版,发布于 2015 年。它旨在提高 Web 性能,并为用户提供更好的体验。HTTPS2 在 HTTP 1.1 的基础上进行了许多改进,包括:

  • 使用二进制格式传输数据:HTTP 1.1 使用文本格式传输数据,这会导致大量的冗余。HTTPS2 使用二进制格式传输数据,可以有效地减少数据量。
  • 多路复用:HTTP 1.1 每个请求都需要建立一个新的 TCP 连接。HTTPS2 可以在一个 TCP 连接上同时发送多个请求,这可以提高连接的利用率。
  • 头部压缩:HTTP 1.1 的头部信息通常包含大量的重复数据。HTTPS2 使用头部压缩技术可以有效地减少头部信息的体积。
  • 服务器推送:HTTP 1.1 只能由客户端发起请求。HTTPS2 允许服务器主动向客户端推送资源,这可以减少客户端的请求数量。

2.1、 HTTPS2 对前端的影响

HTTPS2 对前端开发有以下几个影响:

  • 减少 HTTP 请求:HTTPS2 的多路复用特性可以减少 HTTP 请求的数量,这可以提高页面加载速度。
  • 提高资源加载速度:HTTPS2 的二进制格式传输和头部压缩特性可以提高资源加载速度。
  • 降低服务器负载:HTTPS2 的多路复用和服务器推送特性可以降低服务器负载。

2.2、 前端如何使用 HTTPS2

要使用 HTTPS2,前端开发人员需要做以下几件事:

  • 使用支持 HTTPS2 的浏览器:目前,大多数主流浏览器都支持 HTTPS2。
  • 使用支持 HTTPS2 的服务器:大多数主流服务器软件都支持 HTTPS2。
  • 在代码中启用 HTTPS2:在代码中,可以使用 HTTPS 协议来发起请求。

3、 对称加密和非对称加密

Created by: zobor zhang Created time: April 3, 2024 8:23 AM Tags: http

3.1、 对称加密与非对称加密

对称加密非对称加密是两种主要的加密算法。它们在密钥的使用方式、加密速度和安全性方面存在着一些关键的区别。

对称加密

  • 加密和解密使用相同的密钥
  • 加密速度快,效率高。
  • 主要用于数据加密,例如文件加密、网络通信加密等。
  • 安全性取决于密钥的保密性。如果密钥泄露,加密数据就会被破解。

非对称加密

  • 使用一对密钥:公钥和私钥。
  • 公钥公开,私钥保密。
  • 加密速度慢,但安全性更高。
  • 主要用于密钥交换数字签名

两者比较

特性对称加密非对称加密
密钥相同一对
加密速度
安全性密钥保密性私钥保密性
主要用途数据加密密钥交换、数字签名

举例说明

  • 在HTTPS协议中,使用对称加密来加密传输数据,但密钥交换是通过非对称加密来实现的。
  • 在数字签名中,使用非对称加密来生成签名,签名者用私钥签名,验证者用公钥验证签名。

4、 SSL证书加密过程

SSL证书是通过非对称加密算法来实现加密的。下面是SSL证书加密的简要过程:

  1. 生成密钥对:首先,服务器会生成一对密钥,包括公钥和私钥。公钥用于加密数据,私钥用于解密数据。
  2. 申请证书:服务器将其公钥发送给证书颁发机构(CA),CA会对服务器的身份进行验证,并签发包含服务器公钥的数字证书。
  3. 证书验证:客户端在访问服务器时会收到服务器返回的证书。客户端会验证证书的有效性,包括检查证书是否由受信任的CA签发,确保证书没有被篡改等。
  4. 建立安全连接:一旦客户端验证通过,它会生成一个会话密钥(对称密钥),并使用服务器的公钥加密这个会话密钥。服务器收到加密的会话密钥后,使用私钥解密,得到会话密钥。
  5. 安全通信:接下来,客户端和服务器双方都拥有了相同的会话密钥,它们将使用这个对称密钥来加密和解密数据,确保通信过程中的数据安全性。

通过这种方式,SSL证书实现了数据的加密传输,保障了通信过程中的安全性和隐私性。这种加密方式有效防止了中间人攻击和窃听等安全威胁。


5、 SSL防中间人攻击

SSL防止中间人攻击主要依靠以下两种机制:

  • 服务器端证书:服务器端证书是由受信的证书颁发机构(CA)颁发的,用于证明服务器的身份。当客户端连接到服务器时,服务器会将证书发送给客户端。客户端会验证证书的有效性,以确保自己正在连接到合法的服务器。
  • 加密:SSL使用加密算法来加密传输中的数据,从而防止黑客读取数据。即使黑客能够截获数据,也无法解密数据。

具体来说,SSL防止中间人攻击的过程如下:

  1. 客户端向服务器发送一个连接请求。
  2. 服务器向客户端发送其证书。
  3. 客户端验证证书的有效性。
  4. 客户端和服务器协商一个加密套件。
  5. 客户端和服务器使用加密套件来加密所有后续通信。

如果黑客试图进行中间人攻击,他可以截获客户端和服务器之间的通信。但是,他无法伪造服务器的证书,也无法解密加密后的数据。因此,黑客无法窃听或篡改数据。

5.1、 客户端验证证书有效性

客户端验证证书的有效性主要依靠以下两种机制:

  • 证书链:证书链是由一系列证书组成的,其中根证书是自签名的,其他证书都是由根证书或其他信任的证书颁发的。客户端会验证证书链的完整性,以确保服务器的证书是由受信的证书颁发机构颁发的。
  • 数字签名:数字签名是一种用于验证数据完整性的加密技术。服务器会在证书中加入数字签名,客户端会使用证书颁发机构的公钥来验证数字签名。如果数字签名验证成功,则证明证书没有被篡改。

具体来说,客户端验证证书有效性的过程如下:

  1. 客户端从服务器接收证书。
  2. 客户端检查证书的有效期。
  3. 客户端检查证书的颁发机构。
  4. 客户端构建证书链。
  5. 客户端验证证书链的完整性。
  6. 客户端使用证书颁发机构的公钥验证证书的数字签名。

如果上述所有验证都成功,则客户端认为证书有效。