HTTP
HTTP超文本传输协议,是基于TCP实现的应用层协议。
HTTP的工作过程
一次HTTP操作称为一个事务,其整个工作过程如下:
1)地址解析
如用客户端浏览器请求这个页面:localhost.com:8080/index.htm
从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
bash
协议名:http
主机名:localhost.com
端口:8080
对象路径:/index.htm
2)DNS地址解析
浏览器先检查本地 DNS 缓存中是否有对应的 IP 地址。若没有,会向本地 DNS 服务器发送解析请求。本地 DNS 服务器若也无缓存信息,就会向根域名服务器发出请求,逐级查询,直至找到该域名对应的 IP 地址。
3)封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包。
4)封装成TCP包,建立TCP连接(TCP的三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口。
4)浏览器发送请求命令
建立连接后,浏览器发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容
5)服务器响应
服务器接到请求后,给予相应的响应信息,包括页面的渲染。
HTTP的请求方式
bash
GET: 获取URL指定的资源;
POST:传输实体信息
PUT:上传文件
DELETE:删除文件
HEAD:获取报文首部,与GET相比,不返回报文主体部分
OPTIONS:询问支持的方法
TRACE:追踪请求的路径;
CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信。主要使用SSL和TLS将数据加密后通过网络隧道进行传输。
HTTP的缺点:
- 通信使用明文,可能被窃听
- 不验证通信方的身份,可能遭遇伪装
- 无法证明报文的完整性,有可能遭遇篡改
HTTPS
HTTP+加密+认证+完整性保护 = HTTPS
HTTPS(HyperText Transfer Protocol Secure):是在 HTTP 基础上增加了 SSL/TLS 安全层,数据在传输过程中经过加密,保证了数据的保密性、完整性和真实性。
HTTPS 的核心技术依赖于SSL/TLS协议,通过加密机制确保数据安全。
SSL/TLS协议
SSL(Secure Sockets Layer):是最初为 HTTPS 提供加密的协议,目前已被升级为 TLS。
• TLS(Transport Layer Security) :是 SSL 的继任者,现行标准。它为网络通信提供了加密 、身份验证 、数据完整性等安全服务。
TLS/SSL工作原理
HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
对称加密与非对称加密
对称加密
在对称加密中,加密密钥与解密密钥是相同的。发送方和接收方共享同一个密钥,用这个密钥对数据进行加密和解密。
• 优点:加密和解密速度快,适合大数据量的加密。
• 缺点:需要安全地交换密钥,否则密钥泄露会导致数据被窃取。
非对称加密:
非对称加密使用一对密钥------公钥和私钥。公钥可以公开,私钥需要保密。
• 加密流程:发送方用接收方的公钥加密数据 ,接收方用自己的私钥解密。
• 优点:公钥可以公开,不用担心密钥交换的问题,安全性更高。
• 缺点:加密和解密速度较慢。
工作流程
1. 握手阶段:
• 客户端与服务器进行握手,服务器会将它的数字证书发送给客户端。
• 客户端验证证书的真实性(是否是由可信的证书颁发机构 CA 签发,证书是否有效等)。
2. 密钥协商:
• 一旦证书验证通过,客户端和服务器之间会协商一个会话密钥,用于接下来的数据加密传输。密钥协商采用非对称加密(公钥&&私钥)技术。
3. 数据传输:
• 双方使用协商好的会话密钥进行通信,数据采用对称加密(加密&&解密密钥一样)的方式加密和解密。

•预主密钥: 服务端向客户端打招呼后,会把公钥也发送给客户端,客户端生成第三个随机数,也就是预主密钥,这个预主密钥会经过收到的公钥进行加密 发送给服务端,服务端用自己的私钥解密得到预主密钥
• 数字证书:HTTPS 使用数字证书来验证服务器的身份。这个证书由证书颁发机构(CA, Certificate Authority)签发,包含服务器的公钥和相关信息。
• 数字签名:证书中会有 CA 对服务器的公钥及相关信息的数字签名,保证证书的真实性和完整性。客户端通过 CA 的公钥验证这个签名,如果签名有效,则证明该证书可信。
流程:
- 服务器提供数字证书:证书中包含服务器的公钥。
- 客户端验证证书:通过 CA 的公钥验证证书是否有效。
- 客户端生成随机数:使用服务器的公钥加密该随机数,发送给服务器。
- 服务器解密:服务器用自己的私钥解密随机数,双方使用这个随机数生成的对称密钥进行数据加密。