概念
HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网中最核心的应用层协议,用于客户端(如浏览器、APP)与服务器之间的资源传输(如网页、图片、接口数据等)
协议定位
属于 TCP/IP 协议栈的应用层协议,基于传输层的 TCP 协议(HTTP/3 基于 UDP,但主流仍为 HTTP/1.1 和 HTTP/2)。
核心作用:定义客户端与服务器之间的 "通信规则",包括请求格式、响应格式、资源定位、状态管理等。
核心特性
无状态:协议本身不记录客户端的历史请求状态(每次请求都是独立的),需通过 Cookie、Session 等机制实现状态保持。
无连接(HTTP/1.0 特性):默认短连接,每次请求后关闭 TCP 连接;HTTP/1.1 引入 keep-alive 支持长连接,复用 TCP 连接减少开销。
媒体无关:可传输任意类型数据(文本、图片、视频等),通过 Content-Type 字段标识数据类型。
基于请求 - 响应模型:客户端主动发起请求,服务器被动响应,无服务器主动推送(HTTP/2 支持服务器推送,HTTP/1.1 不支持)。
HTTP 协议版本演进(重点对比)
HTTP 版本对比
| 版本 | 核心特性 | 优势与不足 |
|---|---|---|
| HTTP/1.0 | • 短连接(默认关闭 TCP 连接) • 无管线化 • 头部不压缩 | 优势: • 简单易实现 不足: • 连接开销大 • 并发性能差(同一域名最多同时建立 6 个 TCP 连接) |
| HTTP/1.1 | • 长连接(keep-alive 默认开启) • 管线化(批量发送请求) • 支持 Chunked 编码 | 优势: • 解决 HTTP/1.0 的连接开销问题 不足: • 头部冗余大 • 管线化支持有限(需服务器配合) |
| HTTP/2 | • 二进制帧传输 • 多路复用(同一 TCP 连接并发传输多个请求) • 头部压缩 • 服务器推送 | 优势: • 并发性能大幅提升 • 减少带宽占用 • 兼容 HTTP/1.1 语义,无需修改业务代码 |
| HTTP/3 | • 基于 UDP 协议(QUIC 协议) • 0-RTT 握手 • 更强的拥塞控制 | 优势: • 解决 TCP 队头阻塞问题 • 弱网环境下性能更优 现状: • 目前支持度逐步提升(如 Chrome、Nginx) |
复习重点:HTTP/1.1 是目前最主流的版本,需掌握其长连接、管线化等核心优化;HTTP/2 的多路复用和头部压缩是关键升级点。
HTTP 请求格式(Request)
HTTP 请求由 请求行、请求头部、空行、请求正文 四部分组成(空行是请求头部与正文的分隔符,不可省略)。
请求行(Request Line)
格式:请求方法 + 资源路径 + 协议版本 + \r\n
请求方法:表示客户端对服务器的操作意图,核心方法如下:
HTTP 请求方法对比
| 方法 | 作用 | 特点 |
|---|---|---|
| GET | 请求获取服务器资源(如网页、图片) | • 无请求正文 • 参数拼接在 URL 中(长度有限制,约 2KB) • 幂等(多次请求结果一致) |
| POST | 向服务器提交数据(如表单提交、接口请求) | • 有请求正文 • 参数在正文中(无长度限制) • 非幂等(多次提交可能产生不同结果) |
| PUT | 向服务器上传资源(全量更新) | • 幂等 • 如更新用户信息(全量覆盖) |
| DELETE | 请求删除服务器资源 | • 幂等 • 如删除文件 |
| HEAD | 类似 GET,但仅返回响应头部,不返回正文(用于检查资源是否存在、获取文件大小) | • 无正文 • 响应格式与 GET 一致 |
| OPTIONS | 询问服务器支持的请求方法、头部等信息(跨域请求预检常用) | • 用于跨域预检请求 • 获取服务器支持的HTTP方法 |
资源路径:客户端请求的服务器资源地址(如 /index.html、/api/user),可包含查询参数(如 /?id=1&name=test)。
协议版本:如 HTTP/1.1、HTTP/2。
示例请求行:GET /index.html?name=test HTTP/1.1\r\n
请求头部(Request Headers)
键值对格式(Key: Value\r\n),用于传递请求的附加信息(如客户端类型、正文类型、连接方式等),核心头部如下:
HTTP 头部字段说明
| 头部字段 | 作用 | 示例 |
|---|---|---|
| Host | 指定服务器域名和端口(HTTP/1.1 必选头部) | Host: www.example.com:8080 |
| Connection | 指定连接类型(长连接 / 短连接) | Connection: keep-alive(长连接) |
| Content-Type | 指定请求正文的媒体类型(POST 请求必选) | application/json(JSON 数据) multipart/form-data(文件上传) |
| Content-Length | 指定请求正文的长度(字节数) | Content-Length: 1024 |
| User-Agent | 标识客户端类型(浏览器、APP 等),服务器可据此返回适配内容 | Mozilla/5.0 (Windows NT 10.0; ...) |
| Accept | 客户端可接收的响应数据类型 | Accept: text/html,application/json |
| Cookie | 客户端存储的会话信息(用于状态保持) | Cookie: sessionId=abc123 |
请求正文(Request Body)
可选部分,仅 POST、PUT 等方法需要(GET、HEAD 无正文)。
内容格式由 Content-Type 决定,常见类型:
表单数据:application/x-www-form-urlencoded(如 name=test&age=20)。
JSON 数据:application/json(如 {"name":"test","age":20})。
文件上传:multipart/form-data(含文件二进制数据和表单字段)。
完整请求示例(POST)
POST /api/user HTTP/1.1\r\n
Host: www.example.com\r\n
Connection: keep-alive\r\n
Content-Type: application/json\r\n
Content-Length: 30\r\n
User-Agent: Mozilla/5.0\r\n
\r\n
{"name":"test","age":20}
HTTP 响应格式(Response)
HTTP 响应由 状态行、响应头部、空行、响应正文 四部分组成,与请求格式对称。
状态行(Status Line)
格式:协议版本 + 状态码 + 状态描述 + \r\n
协议版本:与请求版本一致(如 HTTP/1.1)。
HTTP 状态码详解
| 状态码范围 | 类别 | 核心含义 | 常见状态码及说明 |
|---|---|---|---|
| 1xx | 信息响应 | 服务器已接收请求,需继续处理 | • 100 Continue :客户端需发送剩余请求 • 101 Switching Protocol:切换协议,如 HTTP/2 |
| 2xx | 成功响应 | 请求已成功处理 | • 200 OK :请求成功 • 204 No Content :成功无返回正文 • 206 Partial Content:分片下载 |
| 3xx | 重定向 | 需客户端进一步操作 | • 301 Moved Permanently :永久重定向,如域名变更 • 302 Found :临时重定向 • 304 Not Modified:资源未修改,使用缓存 |
| 4xx | 客户端错误 | 客户端请求有误 | • 400 Bad Request :请求参数错误 • 401 Unauthorized :未授权,需登录 • 403 Forbidden :禁止访问 • 404 Not Found:资源不存在 |
| 5xx | 服务器错误 | 服务器处理失败 | • 500 Internal Server Error :服务器内部错误 • 502 Bad Gateway :网关错误 • 503 Service Unavailable :服务过载 • 504 Gateway Timeout:网关超时 |
状态描述:状态码对应的英文描述(如 200→OK,404→Not Found)。
示例状态行:HTTP/1.1 200 OK\r\n
响应头部(Response Headers)
键值对格式,传递响应的附加信息(如服务器类型、正文类型、缓存策略等),核心头部如下:
HTTP 响应头部字段说明
| 头部字段 | 作用 | 示例 |
|---|---|---|
| Server | 标识服务器软件类型 | Server: Nginx/1.21.0 |
| Content-Type | 指定响应正文的媒体类型(客户端据此解析) | text/html; charset=utf-8(网页) image/jpeg(图片) |
| Content-Length | 指定响应正文的长度 | Content-Length: 2048 |
| Content-Encoding | 指定响应正文的压缩方式(如 gzip) | Content-Encoding: gzip |
| Set-Cookie | 服务器向客户端设置 Cookie(用于状态保持) | Set-Cookie: sessionId=abc123; Path=/ |
| Cache-Control | 指定响应的缓存策略(如是否可缓存、缓存时长) | Cache-Control: max-age=3600(缓存 1 小时) |
| Location | 重定向目标地址(3xx 状态码必含) | Location: https://new.example.com |
响应正文(Response Body)
服务器返回的核心数据(如网页 HTML、JSON 接口数据、图片二进制等)。
格式由 Content-Type 决定,与请求正文对应(如客户端请求 application/json,响应正文为 JSON 字符串)。
完整响应示例
HTTP/1.1 200 OK\r\n
Server: Nginx/1.21.0\r\n
Content-Type: application/json; charset=utf-8\r\n
Content-Length: 25\r\n
Cache-Control: max-age=3600\r\n
\r\n
{"code":0,"msg":"success"}
HTTP 核心机制
长连接与短连接(HTTP/1.1 关键优化)
短连接(HTTP/1.0 默认):每次请求建立 TCP 连接,处理完响应后关闭连接。
缺点:频繁建立 / 关闭 TCP 连接(三次握手、四次挥手),开销大。
长连接(HTTP/1.1 默认):通过 Connection: keep-alive 启用,TCP 连接在处理完多个请求后才关闭(默认超时时间约 60 秒)。
优势:减少连接开销,提升并发性能;同一域名最多同时保持 6 个长连接(浏览器限制)。
缓存机制(减少重复请求,提升性能)
HTTP 缓存分为 强缓存 和 协商缓存,通过响应头部控制:
强缓存:客户端直接使用本地缓存,不向服务器发起请求。
相关头部:Cache-Control: max-age=3600(缓存 1 小时)、Expires: Wed, 21 Oct 2025 07:28:00 GMT(过期时间)。
优先级:Cache-Control > Expires(Expires 依赖客户端时间,可能不准)。
协商缓存:客户端先向服务器询问缓存是否有效,有效则使用缓存(304 响应),无效则返回新数据(200 响应)。
相关头部:Last-Modified(资源最后修改时间)+ If-Modified-Since(客户端询问是否修改);ETag(资源唯一标识)+ If-None-Match(客户端询问标识是否变化)。
跨域资源共享(CORS)
问题:浏览器的 "同源策略" 限制不同域名、端口、协议的客户端向服务器发起请求(如 http://a.com 不能直接请求 http://b.com 的接口)。
解决:服务器通过响应头部开启 CORS:
Access-Control-Allow-Origin: *(允许所有域名跨域)。
Access-Control-Allow-Methods: GET,POST(允许的请求方法)。
Access-Control-Allow-Headers: Content-Type(允许的请求头部)。
预检请求:复杂跨域请求(如 POST 带 JSON 正文、自定义头部)会先发送 OPTIONS 请求,询问服务器是否允许跨域。
Cookie 与 Session(状态保持)
Cookie:客户端存储的小型文本数据(由服务器通过 Set-Cookie 设置),每次请求自动携带到服务器。
特点:大小限制约 4KB,可设置过期时间(Expires 或 Max-Age),支持跨域名隔离。
Session:服务器端存储的会话数据(如用户登录状态),通过 Cookie 中的 sessionId 关联客户端。
特点:数据存储在服务器(更安全),无大小限制,会话过期后自动销毁。
关系:Cookie 是 Session 的 "载体",客户端通过 Cookie 传递 sessionId,服务器据此识别用户身份。
复习重点总结
协议结构:请求 / 响应的四部分组成,核心头部字段的作用。
状态码:5 大类状态码的含义,常见状态码(200、301、302、304、400、401、403、404、500、502)的使用场景。
版本差异:HTTP/1.1 与 HTTP/2 的核心优化(长连接、多路复用)。
核心机制:长连接、缓存(强缓存 vs 协商缓存)、CORS、Cookie/Session。
请求方法:GET 与 POST 的区别(参数位置、长度限制、幂等性)。
HTTPS
HTTPS(HyperText Transfer Protocol Secure)是 HTTP 协议的安全版本,核心是在 HTTP 与 TCP 之间增加了 TLS/SSL 加密层,解决 HTTP 明文传输的安全隐患(窃听、篡改、伪造)。
HTTPS 核心技术解析
HTTPS 的核心定位与解决的问题
核心定位
- 本质:HTTPS = HTTP + TLS/SSL(TLS 是 SSL 的升级版,目前主流为 TLS 1.2/1.3)
- 底层依赖:基于 TCP 协议(TLS 握手需先建立 TCP 连接),端口为 443(HTTP 为 80)
解决 HTTP 的三大安全问题
- 窃听风险:HTTP 明文传输,数据可能被中间网络设备(如路由器)窃取(如账号密码、支付信息)
- 篡改风险:数据传输过程中可能被篡改(如修改订单金额、替换网页内容)
- 伪造风险:攻击者可能伪造服务器身份,诱导客户端连接虚假服务器(如钓鱼网站)
HTTPS 的核心安全机制(TLS/SSL 加密原理)
TLS/SSL 采用"对称加密 + 非对称加密 + 数字证书"混合方案,兼顾安全性和传输效率:
对称加密(用于传输数据加密)
定义 :加密和解密使用同一把密钥(如 AES 算法)
优势 :加密速度极快,适合海量数据传输(如 HTTP 正文、图片等)
缺点:密钥需在客户端和服务器之间传递,直接传递易被窃取
2. 非对称加密(用于密钥协商)
定义 :使用一对"公钥 - 私钥",公钥公开(可被任何人获取),私钥保密(仅服务器持有)
特性 :公钥加密的数据,仅私钥能解密;私钥加密的数据,仅公钥能解密
优势 :无需传递密钥,仅需交换公钥,安全性高(如 RSA、ECC 算法)
缺点:加密速度慢,不适合海量数据传输
3. 数字证书(用于身份验证)
定义 :由权威 CA(Certificate Authority,证书颁发机构)颁发的"服务器身份凭证"
包含内容 :服务器公钥、服务器域名、证书有效期、CA 签名等信息
作用:证明服务器身份合法性,防止"公钥伪造"(攻击者无法伪造 CA 签名的证书)
4. 混合方案工作逻辑
用非对称加密 安全传递"对称加密的密钥"(避免密钥被窃听)
用对称加密 传输后续所有 HTTP 数据(保证传输效率)
用数字证书验证服务器身份(避免连接伪造服务器)
HTTPS 完整工作流程(TLS 握手 + HTTP 传输)
以主流的 TLS 1.2 为例,核心分为 "TLS 握手" 和 "HTTP 数据传输" 两步:
第一步:TLS 握手(核心是安全协商密钥和验证身份)

关键结论 :握手完成后,客户端和服务器持有相同的会话密钥,且全程未明文传输密钥(安全)。
第二步:HTTP 数据传输
客户端将 HTTP 请求(如 GET /index.html)用**会话密钥(对称加密)**加密后,通过 TCP 发送给服务器
服务器用相同的会话密钥解密,处理请求后,将 HTTP 响应(如 HTML 内容)加密后返回
后续所有数据都通过会话密钥加密传输,直到连接关闭
TLS 1.3 的优化
握手流程简化 :仅需 1 个往返(TLS 1.2 需 2 个往返)
0-RTT 握手 :首次连接后二次连接可跳过部分步骤,速度更快
安全性提升 :移除不安全加密套件
传输效率:进一步提升
HTTPS 与 HTTP 的核心差异
HTTP vs HTTPS 详细对比
| 特性 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,无加密、无身份验证 | 加密传输(TLS),服务器身份验证(证书) |
| 端口 | 80 端口 | 443 端口 |
| 传输速度 | 无加密/握手开销,速度快 | 需 TLS 握手和加密解密,速度略慢(差距已缩小) |
| 资源消耗 | 服务器/客户端消耗低 | 服务器/客户端需加密解密,消耗略高 |
| 证书要求 | 无需证书 | 需 CA 颁发的有效 SSL 证书(免费/付费) |
| 核心用途 | 普通资源访问(如静态网页) | 敏感数据传输(登录、支付、接口) |
| 浏览器标识 | 无特殊标识 | 地址栏显示"小锁"图标,URL 前缀为 https |
HTTPS 关键细节(复习重点)
证书相关
证书类型
域名型证书(DV) :仅验证域名所有权,免费(如 Let's Encrypt),适合个人网站
企业型证书(OV) :验证企业身份,付费,适合企业官网
增强型证书(EV):最高级别验证,地址栏显示企业名称,适合金融、电商平台
证书状态
证书过期/无效:浏览器会提示"证书无效",阻止用户访问(避免风险)
会话密钥的生命周期
会话密钥仅在当前 TCP 连接有效,连接关闭后密钥失效
长连接(keep-alive)中,同一连接复用会话密钥,无需重复握手
HTTPS 的加密范围
加密内容 :HTTP 请求/响应的全部内容(请求行、头部、正文)
不加密内容:TCP 头部、IP 头部(仅传输层和应用层数据加密)
常见误解
误解 1:HTTPS 是"绝对安全"的?
纠正:HTTPS 能防窃听、篡改、伪造,但无法防范服务器本身被入侵(如服务器私钥泄露)
误解 2:HTTPS 一定比 HTTP 慢很多?
纠正:TLS 1.3 优化后,握手开销大幅降低,加上硬件加密支持,日常使用中速度差距不明显
复习总结
HTTPS 的核心是 "用 TLS/SSL 解决 HTTP 的安全问题",关键记住:
核心方案:对称加密(传数据)+ 非对称加密(传密钥)+ 数字证书(验身份)。
工作流程:先 TLS 握手(协商密钥 + 验身份),再加密传输 HTTP 数据。
核心差异:HTTPS 多了加密和证书,端口 443,适合敏感场景