概述:
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!!!