一、HTTP是什么?
首先,HTTP是一种协议,它的全名叫超文本传送协议。这么听感觉很抽象,那它用来干什么的呢?OSI七层协议里面的应用层知道吧,它就是面向事务的应用层协议,它是万维网上能够可靠地交换文件的重要基础,注意,协议HTTP不仅传送完成超文本跳转所需的信息,也传送任何可以在网上得到的信息,如文本,超文本,声音和图像等。
二、HTTP的工作方式
我们在介绍工作方式之前,先看一下HTTP的特点,能帮助我们更好的了解工作方式。
(1)HTTP的核心特点:
1.无连接:HTTP本身是无连接的,也就是在通信双方交换HTTP报文之前不需要建立连接。
2.无状态:同一个客户在多次访问同一个服务器上的页面时,服务器的页面与第一次相同
3.明文传输:传输过程中,数据不加密
4.灵活可扩展:支持任意类型的数据传输
知道了上述的特点之后,我们再来大致了解一下HTTP的响应类型
(2)HTTP的请求响应类型
HTTP使用客户端—服务器的(C/S)架构:
客户端(Client)(如浏览器)发送 HTTP 请求(Request)。
服务器(Server)(如 Nginx、Apache)返回 HTTP 响应(Response)。
web 浏览器请求:
请求过程如下 ⬇️
- 用户输入地址后回车或点击链接
- 浏览器拼装 HTTP 报文并发送请求给服务器
- 服务器处理请求后,发送响应报文给浏览器
- 浏览器解析响应报文并使用渲染引擎显示到界面
APP 客户端请求:
请求过程如下 ⬇️
- 用户点击或界面自动触发联网需求
- Android 代码调用拼装 HTTP 报文并发送请求到服务器
- 服务器处理请求后发送响应报文给手机
- Android 代码处理响应报文并作出相应处理(如储存数据、加工数据、显示数据到界面)
(3)工作方式
1.建立TCP连接,
因为之前说过,HTTP是无连接的,但是它依赖传输层的面向连接的TCP协议来保证可靠传输。
流程:
客户端(如浏览器)发起 TCP 三次握手(SYN → SYN-ACK → ACK)与服务器建立连接。
连接建立后,HTTP 请求和响应通过该 TCP 连接传输。
2.客户端发送HTTP请求
HTTP 请求报文由请求行(Request Line)、请求头(Request Header)、请求体(Request Body)这三部分组成
请求行:定义请求的基本操作目标和协议版本。(告诉服务器做什么,对谁做)
请求头:传递请求的元数据(附加信息),控制客户端和服务器的交互行为(如何做)
请求体:携带客户端发送的实际数据(仅某些方法需要,如
POST
、PUT
)(提供具体数据)
请求行内容:
请求头内容:
3.服务器处理请求并返回 HTTP 响应(Response)
同样的,服务器解析请求后,返回 状态行(Status Line)、响应头(Headers)、响应体(Body)
4.关闭连接
三、请求方法都有哪些
1.GET
- 最常见的请求方式
- 指定请求路径,向服务器请求资源
- 只获取资源,不对服务器数据进行修改
- 不发送 body
GET /users/1 HTTP/1.1
Host: api.github.com
2.Post
- POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用,
- 包含 body,发送给服务器的内容写在 body 里面
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
<entity-body>
3.PUT
- 用于修改资源
- 包含 body,发送给服务器的内容写在 body 里面
PUT /users/1 HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
<entity-body>
4.DELETE
- 用于删除资源
- 不发送 body
DELETE /users/1 HTTP/1.1
Host: api.github.com
5.HEAD
- HEAD 与 GET 的使用方式完全相同。
- 区别在于,HEAD 请求的返回响应中没有 Body
- 用途:比如下载需求,返回的 Headers 中有下载内容的大小,可以用于显示进度。
四、为什么需要HTTPS
1.HTTP的安全问题
之前提到过HTTP是明文传输的,明文传输就会出现安全隐患。那接下来看看HTTP的安全隐患。
(1)明文传输 → 数据易被窃听(无保密性)
-
问题:HTTP 数据(如密码、银行卡号)以 明文形式传输,黑客可通过 抓包工具(如 Wireshark) 直接读取。
-
风险:
-
登录凭据、聊天记录、隐私信息泄露。
-
公共 Wi-Fi 下尤其危险(如咖啡馆、机场)。
-
-
HTTPS 解决方案:
-
使用 TLS 加密(如 AES),数据变为密文,即使被截获也无法解密。
-
(2)无完整性校验 → 数据易被篡改
-
问题:HTTP 数据在传输中可能被 中间人(MITM) 篡改(如插入广告、恶意代码)。
-
风险:
-
下载的软件被植入病毒。
-
网页内容被篡改(如伪造银行转账页面)。
-
-
HTTPS 解决方案:
-
通过 哈希算法(如 SHA-256) 和 消息认证码(MAC) 确保数据未被修改。
-
(3)无身份认证 → 易遭伪装攻击
-
问题:HTTP 无法验证服务器身份,黑客可伪造网站(如仿冒支付宝)。
-
风险:
-
钓鱼网站:用户误输入密码,导致账号被盗。
-
中间人攻击:通信被劫持(如公共网络)。
-
-
HTTPS 解决方案:
-
使用 数字证书(CA 签发) 验证网站真实性。
-
浏览器会显示 锁图标 或警告无效证书。
-
2.HTTPS如何解决问题
HTTPS(HyperText Transfer Protocol Secure)是为了解决HTTP协议在安全性上的不足而设计的,它通过引入加密和认证机制来确保网络通信的安全。以下是HTTPS如何满足保密性、完整性和身份认证三大需求的解释:
(1). 保密性
问题:HTTP是明文传输的,数据(如密码、信用卡号)可能被窃听。
解决方案:HTTPS使用加密技术(如TLS/SSL协议)对传输的数据进行加密。
对称加密:通信双方使用同一个密钥加密和解密数据(如AES算法),效率高。
非对称加密:在握手阶段通过公钥加密交换对称密钥(如RSA算法),确保密钥传输的安全。
效果:即使数据被截获,攻击者也无法解密内容。
(2). 完整性
问题:HTTP数据可能被篡改(如插入恶意代码或修改交易金额)。
解决方案:HTTPS使用消息认证码(MAC)或数字签名。
TLS协议通过哈希算法(如SHA-256)生成数据的摘要,并用密钥加密生成MAC。接收方验证MAC是否匹配。
效果:任何篡改都会导致MAC校验失败,接收方会丢弃数据。
(3). 身份认证
问题:HTTP无法验证对方身份,可能导致中间人攻击(如假冒银行网站)。
解决方案:HTTPS依赖数字证书和证书颁发机构(CA)。
数字证书:服务器向CA申请证书,证书包含公钥、域名、CA签名等信息。
CA验证:浏览器内置可信CA列表,会验证证书的真实性和有效性(如域名匹配、未过期)。
效果:用户可确认网站的真实身份,防止与伪造服务器通信。
3.HTTPS保证安全机制的核心技术
(1) 对称加密
特点:
加密和解密使用 同一个密钥(如
AES-256
)。速度快,适合加密大量数据。
分类:
流式加密(如
RC4
,已淘汰):逐比特加密。分组加密(如
AES
、DES
):按固定块(如 128bit)加密。
(2)非对称加密
特点:
使用 公钥(public key) 和 私钥(private key) 配对:
公钥加密 → 只能用 私钥解密(用于密钥交换)。
私钥签名 → 只能用 公钥验证(用于身份认证)。
计算复杂,性能低,仅用于关键数据(如交换对称密钥)。
密钥交换流程(TLS 握手):
-
客户端用 服务器的公钥 加密一个随机数(
pre-master secret
)。 -
服务器用 私钥 解密,得到
pre-master secret
。 -
双方基于
pre-master secret
生成 对称加密密钥(session key
)。 -
后续通信使用 对称加密(如
AES
)提高效率。
(3) 哈希算法
特点:
将任意数据映射为固定长度(如
SHA-256
输出 256bit)。不可逆(无法从哈希值还原原始数据)。
用于校验数据完整性(如文件下载)。
用途:
-
生成 数字签名(防篡改)。
-
校验文件完整性(如
checksum
)。
(4)数字签名
作用:
验证数据来源(认证) + 确保数据未被篡改(完整性)。
流程:
-
发送方:
-
对数据计算 哈希值(如
SHA-256
)。 -
用 私钥加密哈希值 → 生成 签名。
-
发送 原始数据 + 签名。
-
-
接收方:
-
用 公钥解密签名 → 得到哈希值
H1
。 -
对原始数据计算哈希值
H2
。 -
比较
H1 == H2
,若一致则数据未被篡改。
-
(5)证书机制
作用:确保公钥的真实性(防中间人攻击)。
证书内容:
-
域名、公钥、签发者(CA)、有效期、数字签名等。
验证流程:
-
浏览器检查证书是否由 可信 CA 签发(如 DigiCert、Let’s Encrypt)。
-
验证证书 是否过期 或 域名是否匹配。
-
用 CA 的公钥 解密签名,比对证书哈希值是否一致。
证书链(Chain of Trust):
-
根证书(Root CA)→ 中间证书(Intermediate CA)→ 服务器证书。
-
根证书预装在操作系统/浏览器中。
五、HTTP与HTTPS主要区别
HTTP传输的数据是明文,容易被窃听者截取和篡改。
HTTPS通过加密传输数据,使得内容对窃听者不可见,从而保护了数据的隐私性。