消息队列篇--通信协议篇--HTTP和HTTPS

发布于:2025-03-30 ⋅ 阅读:(25) ⋅ 点赞:(0)

概述:
HTTP(HyperText Transfer Protocol)和HTTPS(HyperText Transfer Protocol Secure)是用于在Web浏览器和Web服务器之间传输网页内容的两种主要协议。它们的基本功能相似,但HTTPS在HTTP的基础上增加了安全性机制。

1、HTTP(HyperText Transfer Protocol)

HTTP是一种无状态的应用层协议,用于在客户端(通常是Web浏览器)和服务器之间传输超文本(如HTML文档)。基于请求-响应模型工作,客户端发送请求,服务器返回响应。

特点:

  • 无状态:每次请求都是独立的,服务器不会记住之前的请求状态。
  • 明文传输:HTTP协议本身不加密数据,所有数据以明文形式在网络上传输,容易被窃听或篡改。
  • 简单高效:由于没有加密和认证机制,HTTP协议相对简单且高效,适合对安全性要求不高的场景。

请求方法:

  • GET:从服务器获取资源(如网页、图片等)。
  • POST:向服务器提交数据(如表单数据)。
  • PUT:将数据存储到指定的URL资源中。
  • DELETE:删除指定的URL资源。
  • HEAD:类似于GET,但只请求资源的头部信息,不返回实际内容。
  • OPTIONS:查询服务器支持的HTTP方法。
  • CONNECT:用于建立隧道连接(如代理服务器)。

GET示例请求:

GET /index.html HTTP/1.1
Host: www.example.com

示例响应:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 137

<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>

2、HTTPS(HyperText Transfer Protocol Secure)

HTTPS是HTTP协议的安全版本,通过SSL/TLS加密技术确保数据传输的安全性。HTTPS使用SSL/TLS协议来加密客户端和服务器之间的通信,防止中间人攻击和数据泄露。

特点:

  • 加密传输:使用SSL/TLS对传输的数据进行加密,保护数据的机密性和完整性。
  • 身份验证:通过数字证书验证服务器的身份,确保客户端与正确的服务器进行通信。
  • 完整性检查:通过消息认证码(MAC)确保数据在传输过程中未被篡改。

工作流程:
(1)、SSL/TLS握手:

  • 客户端向服务器发送一个“Client Hello”消息,包含支持的加密算法和随机数。
  • 服务器回应一个“Server Hello”消息,选择双方都支持的加密算法,并发送服务器的数字证书。
  • 客户端验证服务器的数字证书,确保其真实性。
  • 双方协商出一个会话密钥,用于后续通信的加密和解密。

(2)、加密通信:

  • 握手完成后,客户端和服务器使用协商出的会话密钥进行加密通信,确保数据的安全性。

示例请求:

GET /index.html HTTP/1.1
Host: www.example.com

示例响应:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 137

<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>

注意:
虽然请求和响应的内容看起来与HTTP相同,但在HTTPS中,这些数据会在传输前被加密。

3、HTTP与HTTPS的请求和端口

假设你的Web服务分别运行在80,443,9103端口上。

(1)、假设运行在80端口上
HTTP请求示例:

直接请求http://yourdomain.com(端口可以不写,也可以写),
实际相当于请求http://yourdomain.com:80

HTTPS请求示例:

直接请求https://yourdomain.com:80(端口必须指定,否则默认443

(2)、假设运行在443端口上
HTTP请求示例:

直接请求http://yourdomain.com:443(端口必须指定,否则默认80

HTTPS请求示例:

https://yourdomain.com(端口可以忽略,也可以写)
实际相当于请求https://yourdomain.com:443

(3)、假设运行在9103端口上
HTTP请求示例:

直接请求http://yourdomain.com:9103(端口不可以忽略)

HTTPS请求示例:

直接请求https://yourdomain.com:9103(端口不可以忽略)

4、SSL/TLS协议握手过程

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是用于为网络通信提供安全性的加密协议。TLS是SSL的后继版本,目前广泛使用的主要是TLS。

SSL/TLS 握手过程:
(1)、客户端发起请求:

  • 客户端向服务器发送“Client Hello”消息,包含支持的加密套件列表和一个随机数(Client Random)。

(2)、服务器响应:

  • 服务器回应“Server Hello”消息,选择一个双方都支持的加密套件,并发送服务器的数字证书和另一个随机数(Server Random)。

(3)、客户端验证证书:

  • 客户端验证服务器提供的数字证书,确保其真实性。如果验证失败,握手终止。

(4)、生成会话密钥:

  • 客户端生成一个预主密钥(Pre-Master Secret),并使用服务器的公钥对其进行加密,然后发送给服务器。
  • 服务器使用自己的私钥解密预主密钥,双方根据Client Random、Server Random和Pre-Master Secret计算出最终会话密钥。

(5)、加密通信:

  • 握手完成后,客户端和服务器使用最终会话密钥和确认的加密算法进行加密通信,确保数据的安全性。

5、HTTP/2和HTTP/3

随着互联网的发展,HTTP协议也在不断演进,最新的版本包括HTTP/2和HTTP/3。

HTTP/2:

  • 多路复用:允许在同一连接上同时发送多个请求和响应,减少延迟。
  • 头部压缩:通过HPACK算法压缩HTTP头部信息,减少传输数据量。
  • 二进制分帧:使用二进制格式进行数据传输,提高解析效率。

HTTP/3:

  • 基于QUIC协议:HTTP/3基于Google开发的QUIC协议,使用UDP进行传输,解决了TCP的一些性能问题。
  • 更快的连接建立:QUIC支持0-RTT(零往返时间)连接建立,减少了握手延迟。
  • 更好的移动性支持:QUIC提供了更好的移动设备切换网络的支持,减少了连接中断的可能性。

6、总结

HTTP是一种无状态的应用层协议,用于在客户端和服务器之间传输超文本。它简单高效,但由于明文传输,安全性较低。

  • HTTPS是HTTP的安全版本,通过SSL/TLS加密技术确保数据传输的安全性。它提供了加密传输、身份验证和完整性检查,适用于对安全性要求较高的场景。
  • SSL/TLS是HTTPS的基础加密协议,通过握手过程生成会话密钥,确保通信的安全性。
  • HTTP/2和HTTP/3是HTTP协议的最新版本,提供了多路复用、头部压缩和更快的连接建立等功能,进一步提升了性能和用户体验。

逆风翻盘,Dare To Be!!!