HTTP 超详细完整知识点大全
一、HTTP 基础核心概念
1. 定义
HTTP:HyperText Transfer Protocol,超文本传输协议。
- 是应用层协议,基于 TCP/IP 协议簇;
- 用于客户端与服务器之间传输:超文本(HTML)、图片、视频、JSON、文件等资源;
- 是互联网数据通信的基础协议。
2. 核心特性
- 无连接 默认短连接:一次请求-响应完成后,立即断开 TCP 连接,节省服务器资源。
- 无状态
服务器不记录客户端身份和历史请求,每次请求都是独立隔离的。
解决方案:Cookie、Session、Token、JWT 弥补无状态缺陷。
- 明文传输 HTTP 所有数据裸奔明文,无加密,存在窃听、篡改、中间人攻击风险(HTTPS 解决)。
- 基于请求/响应模型 必须客户端主动发起请求,服务器被动响应,服务端无法主动推送数据。
- 灵活拓展
通过
Content-Type支持任意格式数据传输:文本、二进制、JSON、表单、文件等。
3. 协议版本演进
(1)HTTP/1.0
- 早期版本,单次请求单次连接,请求完毕立即断开 TCP;
- 不支持长连接、管线化;
- 缺点:频繁建立/断开 TCP,三次握手四次挥手开销大,性能差。
(2)HTTP/1.1(目前最主流)
- 默认支持长连接(Keep-Alive),一条 TCP 连接可多次请求响应;
- 新增管线化(串行排队请求,无法并行);
- 新增缓存策略、断点续传、虚拟主机、Host 请求头;
- 缺点:
- 队头阻塞(一个请求阻塞,后续全部等待);
- 请求头冗余,每次请求重复携带大量头部字段。
(3)HTTP/2.0
- 基于二进制帧传输,替代文本格式,解析更快;
- 多路复用:单 TCP 连接,多请求并行,彻底解决队头阻塞;
- 头部压缩(HPACK),减少请求头体积;
- 服务器主动推送(Server Push);
- 缺点:TCP 层仍存在阻塞,握手延迟高。
(4)HTTP/3.0
- 底层放弃 TCP,改用 QUIC 协议(基于 UDP);
- 0-RTT 握手,连接建立极快;
- 彻底解决传输层队头阻塞;
- 弱网、移动端网络切换场景体验极佳;
- 目前逐步普及。
二、HTTP 与 TCP/IP 层级关系
1. 网络五层模型
- 应用层:HTTP、HTTPS、FTP、DNS、WebSocket
- 传输层:TCP(HTTP/1.1/2)、UDP(HTTP/3 QUIC)
- 网络层:IP 协议,路由寻址
- 数据链路层:MAC 地址、以太网
- 物理层:网线、光纤、无线电信号
2. 通信流程
客户端应用 → HTTP协议封装 → TCP连接 → IP路由 → 服务器 → 解包响应
3. TCP 关键前置知识
- 三次握手:建立可靠连接
- 四次挥手:断开连接
- 可靠传输:确认应答、超时重传、拥塞控制
HTTP 本身不保证可靠,可靠全靠 TCP 实现。
三、HTTP 完整请求报文结构
HTTP 请求由 请求行、请求头、空行、请求体 四部分组成。
1. 请求行(Request Line)
格式:请求方法 + URL + 协议版本
示例:
GET /index.html HTTP/1.1
- 请求方法:标识操作类型;
- URL:请求资源地址;
- 协议版本:HTTP/1.1 / HTTP/2。
2. 请求头(Request Headers)
键值对格式,每行一个,携带客户端环境、权限、缓存、数据格式等信息。 高频必记请求头
| 请求头 | 作用 |
|---|---|
| Host | 目标域名/IP+端口,虚拟主机核心 |
| User-Agent | 客户端标识(浏览器、设备、系统) |
| Accept | 客户端可接收的响应数据格式 |
| Accept-Encoding | 支持的压缩格式(gzip、deflate) |
| Accept-Language | 客户端语言 |
| Referer | 来源页面地址,防盗链核心 |
| Cookie | 本地存储用户身份凭证 |
| Content-Type | 请求体数据格式 |
| Content-Length | 请求体字节长度 |
| Connection | keep-alive(长连接)/ close |
| Authorization | 身份认证(Token、Basic) |
| Origin | 跨域请求源地址 |
3. 空行
固定分隔符,必须存在,区分请求头和请求体。
4. 请求体(Request Body)
- 只有 POST/PUT/PATCH 等方法才有请求体;
- GET 请求无请求体(参数拼接在 URL 中);
- 存放提交数据:表单、JSON、文件、二进制等。
四、HTTP 响应报文结构
HTTP 响应由 状态行、响应头、空行、响应体 四部分组成。
1. 状态行(Status Line)
格式:协议版本 + 状态码 + 状态描述
示例:
HTTP/1.1 200 OK
2. 响应头(Response Headers)
服务器返回的配置、缓存、数据格式、Cookie 设置等。 高频必记响应头
| 响应头 | 作用 |
|---|---|
| Server | 服务器软件版本 |
| Date | 响应时间 |
| Content-Type | 响应数据格式、编码 |
| Content-Length | 响应体大小 |
| Content-Encoding | 响应压缩格式 |
| Set-Cookie | 下发 Cookie 到客户端 |
| Cache-Control | 缓存控制规则 |
| ETag / Last-Modified | 资源标识,协商缓存 |
| Location | 重定向目标地址 |
| Access-Control-* | 跨域资源共享 CORS |
3. 空行
分隔响应头与响应体。
4. 响应体
服务器返回的真实数据:HTML、CSS、JS、图片、JSON、文件流。
五、HTTP 请求方法(9种标准方法)
1. 常用5大方法
(1)GET
- 作用:查询、获取资源;
- 特点:
- 无请求体,参数拼接在 URL;
- 明文展示,长度有限;
- 安全、幂等;
- 默认会被浏览器缓存。
(2)POST
- 作用:提交数据、新增资源、上传文件;
- 特点:
- 有请求体,参数隐藏;
- 数据无长度限制;
- 不安全、不幂等;
- 默认不缓存。
(3)PUT
- 作用:全量更新资源;
- 幂等:多次请求结果一致;
- 要求客户端传入完整资源数据。
(4)PATCH
- 作用:局部更新资源;
- 只传需要修改的字段,节省流量。
(5)DELETE
- 作用:删除服务器资源;
- 幂等。
2. 小众方法
- HEAD:只获取响应头,无响应体,用于探测资源是否存在;
- OPTIONS:查询服务器支持的请求方法、跨域配置(预检请求);
- TRACE:回显请求路径,调试、安全排查;
- CONNECT:建立隧道代理,用于 HTTPS 代理转发。
3. 核心概念:安全 & 幂等
(1)安全
- 不会修改服务器数据:GET、HEAD、OPTIONS;
- POST/PUT/DELETE 不安全。
(2)幂等
- 多次执行请求,服务器结果完全一致;
- 幂等:GET、PUT、DELETE、HEAD、OPTIONS;
- 非幂等:POST(多次提交会创建多条数据)。
六、HTTP 状态码(完整分类+高频详解)
状态码为 3 位数字,分为 5 大类。
1. 1xx 信息性(临时响应)
- 100 Continue:客户端继续发送请求体;
- 101 Switching Protocols:协议切换(HTTP→WebSocket)。
2. 2xx 成功(请求正常处理)
- 200 OK:请求成功,正常返回数据;
- 201 Created:资源创建成功(POST 新增);
- 204 No Content:成功无响应体;
- 206 Partial Content:断点续传、分片请求。
3. 3xx 重定向
- 301 永久重定向:资源永久迁移,浏览器永久缓存跳转;
- 302 临时重定向:临时跳转,下次仍请求原地址;
- 304 Not Modified:协商缓存命中,资源未修改,复用本地缓存;
- 307/308:严格重定向,保留请求方法与请求体。
4. 4xx 客户端错误
- 400 Bad Request:请求参数错误、格式非法;
- 401 Unauthorized:未登录、无身份认证;
- 403 Forbidden:已登录,但无权限访问;
- 404 Not Found:资源不存在;
- 405 Method Not Allowed:请求方法不支持;
- 409 Conflict:数据冲突;
- 413 Request Entity Too Large:请求体过大。
5. 5xx 服务端错误
- 500 Internal Server Error:服务器代码异常、逻辑报错;
- 502 Bad Gateway:网关/代理后端服务异常;
- 503 Service Unavailable:服务器过载、维护、宕机;
- 504 Gateway Timeout:网关请求后端超时。
七、HTTP 缓存机制(重点难点)
分为强缓存和协商缓存,目的:减少请求、降低服务器压力、提升加载速度。
1. 强缓存(不发请求,直接用本地缓存)
无需和服务器交互,浏览器直接读取本地资源。
控制字段
-
Cache-Control(HTTP/1.1 推荐)
max-age=3600:缓存有效期 3600 秒;no-cache:不使用强缓存,必须走协商缓存;no-store:禁止所有缓存,每次都请求最新资源;public:客户端、代理服务器均可缓存;private:仅浏览器本地缓存,CDN 不缓存。
-
Expires(HTTP/1.0 废弃) 绝对过期时间,依赖本地时间,时间错乱会失效。
2. 协商缓存(发轻量请求,校验资源)
强缓存失效后,客户端携带标识询问服务器:资源是否更新?
- 命中:返回 304,使用本地缓存;
- 失效:返回 200 + 最新资源。
(1)Last-Modified / If-Modified-Since
- 服务器响应头:
Last-Modified资源最后修改时间; - 客户端下次请求头:
If-Modified-Since带上时间; - 缺陷:
- 只能精确到秒;
- 文件内容不变、修改时间变化,会误判更新。
(2)ETag / If-None-Match(更优)
- 服务器生成资源唯一指纹(ETag);
- 客户端请求携带
If-None-Match; - 按文件内容哈希比对,精度更高,解决时间戳缺陷。
3. 缓存整体流程
- 先判断强缓存(Cache-Control/Expires)→ 命中直接使用;
- 强缓存失效 → 携带标识走协商缓存;
- 协商缓存命中 → 304 复用本地;
- 协商缓存失效 → 200 返回新资源,更新缓存规则。
八、HTTPS 深度解析(HTTP+安全)
1. HTTPS 是什么
- HTTP + SSL/TLS;
- 端口:HTTP=80,HTTPS=443;
- 解决 HTTP 明文三大问题:窃听、篡改、伪造中间人。
2. 核心加密机制
- 对称加密 同一密钥加密解密,速度快;缺点:密钥传输易泄露。
- 非对称加密 公钥加密、私钥解密,安全性高;缺点:运算极慢。
- 混合加密(实际使用)
- 用非对称加密传输对称密钥;
- 后续通信全部使用对称加密,兼顾安全与性能。
- 数字证书 CA 防止公钥被中间人篡改伪造,验证服务器真实身份。
- 摘要算法(MD5/SHA256) 校验数据完整性,防止传输篡改。
3. HTTPS 握手流程
- 客户端发起握手,携带支持的 TLS 版本、加密套件;
- 服务器返回证书、选中加密算法;
- 客户端验证证书合法性;
- 客户端生成随机密钥,用服务器公钥加密发送;
- 服务器私钥解密,得到对称密钥;
- 双方使用对称密钥加密通信。
4. HTTP 与 HTTPS 对比
| 维度 | HTTP | HTTPS |
|---|---|---|
| 端口 | 80 | 443 |
| 安全性 | 明文、无加密 | TLS 加密、防篡改、防劫持 |
| 速度 | 快、无握手开销 | 略慢、多 TLS 握手 |
| 证书 | 无需 | 需要 CA 证书 |
| 成本 | 免费 | 证书、服务器算力成本 |
九、跨域与 CORS(前端高频)
1. 同源策略(浏览器安全限制)
同源三要素:协议、域名、端口 必须完全一致。 不同源即为跨域,默认禁止:AJAX、Fetch 跨域请求。
2. 跨域解决方案
- CORS 跨域资源共享(主流)
服务器配置响应头:
Access-Control-Allow-Origin: 允许的域名 Access-Control-Allow-Methods: 允许的方法 Access-Control-Allow-Credentials: true 允许 Cookie - 预检请求(OPTIONS) 复杂请求(带 Cookie、自定义头、JSON 格式)会先发 OPTIONS 预检。
- 其他方案:JSONP、Nginx 反向代理、WebSocket、后端接口转发。
十、Cookie / Session / Token 完整区别
1. Cookie
- 存储在客户端浏览器,小型文本;
- 由服务器
Set-Cookie下发; - 自动随请求携带;
- 限制:大小 4KB、域名隔离、可被禁用。
2. Session
- 存储在服务端;
- 依赖 Cookie 存储 SessionID;
- 解决无状态,记录用户会话;
- 缺点:集群部署需要共享 Session。
3. Token / JWT
- 无状态认证,服务端不存储;
- Token 加密字符串存储用户信息;
- 适合分布式、前后端分离、移动端;
- JWT 组成:头部、载荷、签名。
十一、HTTP 长连接 & 短连接
1. 短连接(HTTP/1.0)
- 请求→响应→立即断开 TCP;
- 频繁握手挥手,性能差。
2. 长连接(HTTP/1.1 Keep-Alive)
- 一条 TCP 连接,多次 HTTP 请求;
- 请求头:
Connection: keep-alive; - 空闲一段时间后自动断开,节省资源。
3. 队头阻塞问题
- HTTP/1.1 长连接串行请求,前面请求卡住,后面全部阻塞;
- 解决:域名分片、HTTP/2 多路复用。
十二、常见 Content-Type 数据格式
application/x-www-form-urlencoded:普通表单默认格式;multipart/form-data:文件上传、复杂表单;application/json:前后端分离主流 JSON 格式;text/html:HTML 页面;text/plain:纯文本;image/jpeg/png/gif:图片资源。
十三、高频面试延伸知识点
- WebSocket 基于 HTTP 握手,全双工通信,服务端可主动推数据; 适用:聊天室、实时通知、弹幕、游戏。
- HTTP 中间人攻击 劫持 HTTP 明文数据,篡改页面、窃取信息,HTTPS 防御。
- CDN 工作原理 缓存静态资源(图片/JS/CSS),就近节点返回,减轻源站压力。
- 请求头劫持、Referer 防盗链 服务器校验 Referer 或 Origin,防止非法盗用资源。