Appearance
408
计算机网络
CN-06-05 WWW与HTTP协议
一、定位信息
- 圈层:核心层
- 前置知识:需要了解C/S模型、TCP协议、DNS域名解析的基本概念,理解URL的含义
- 知识网络位置:HTTP是Web的核心协议,是互联网使用最广泛的应用层协议。它是理解现代Web应用、浏览器工作原理、网络安全(HTTPS)的基础
- 考点热度等级:H级(高频重点)——HTTP的工作原理、持久连接、Cookie等是选择题和综合题的高频考点
二、知识点讲解
2.1 WWW概述
**WWW(World Wide Web,万维网)**是一个分布式的、联机式的信息空间,由Tim Berners-Lee于1989年发明。WWW的三个核心技术:
- HTML(HyperText Markup Language):超文本标记语言,用于描述网页内容
- URL(Uniform Resource Locator):统一资源定位符,用于标识互联网上的资源
- HTTP(HyperText Transfer Protocol):超文本传输协议,用于传输网页数据
URL格式:
协议://主机名:端口/路径
http://www.example.com:80/index.html- 协议:http或https
- 主机名:域名或IP地址
- 端口:可选,默认80(HTTP)或443(HTTPS)
- 路径:资源在服务器上的位置
2.2 HTTP概述
HTTP是无状态的、面向事务的应用层协议,运行在TCP之上,默认使用80号端口(HTTPS使用443号端口)。
HTTP的主要特点:
- 无状态(Stateless):服务器不保存客户端的历史请求信息。每次请求都是独立的。
- 面向事务:一个完整的请求-响应过程构成一个事务。
- C/S模型:客户端(浏览器)发起请求,服务器返回响应。
- 可扩展:通过自定义头部字段可以扩展功能。
2.3 HTTP报文格式
请求报文:
方法 URL HTTP版本\r\n ← 请求行
头部字段名: 值\r\n ← 首部行
头部字段名: 值\r\n
\r\n ← 空行(标志首部结束)
[实体体] ← 请求体(POST/PUT时使用)常见请求方法:
| 方法 | 用途 | 幂等性 |
|---|---|---|
| GET | 获取资源 | 是 |
| POST | 提交数据 | 否 |
| PUT | 更新资源 | 是 |
| DELETE | 删除资源 | 是 |
| HEAD | 仅获取首部 | 是 |
响应报文:
HTTP版本 状态码 短语\r\n ← 状态行
头部字段名: 值\r\n ← 首部行
\r\n ← 空行
[实体体] ← 响应体(HTML页面等)常见状态码:
| 状态码 | 短语 | 含义 |
|---|---|---|
| 200 | OK | 请求成功 |
| 301 | Moved Permanently | 永久重定向 |
| 302 | Found | 临时重定向 |
| 304 | Not Modified | 资源未修改,使用缓存 |
| 400 | Bad Request | 请求语法错误 |
| 403 | Forbidden | 服务器拒绝执行 |
| 404 | Not Found | 资源不存在 |
| 500 | Internal Server Error | 服务器内部错误 |
| 502 | Bad Gateway | 网关错误 |
| 503 | Service Unavailable | 服务不可用 |
2.4 HTTP连接管理
非持久连接(Non-Persistent Connection):
- 每个请求/响应对使用一个单独的TCP连接
- 每次请求都需要建立TCP连接(三次握手)
- HTTP/1.0默认使用非持久连接
持久连接(Persistent Connection):
- 多个请求/响应对复用同一个TCP连接
- 减少了TCP连接建立的开销
- HTTP/1.1默认使用持久连接
持久连接的两种模式:
| 模式 | 说明 | 特点 |
|---|---|---|
| 非流水线(Without Pipelining) | 客户端收到前一个响应后才发下一个请求 | 每个RTT发送一个请求 |
| 流水线(Pipelining) | 客户端可以连续发送多个请求,不需要等待响应 | 显著减少等待时间 |
RTT分析:
- 一次RTT = 一个请求从客户端到服务器再返回的时间
- TCP建立连接 = 1 RTT(第三次握手可以携带HTTP请求)
- 非持久连接传输一个对象 = 2 RTT(1 RTT建立TCP + 1 RTT传输请求/响应)
- 持久连接传输一个对象 = 1 RTT(TCP已建立,只需1 RTT传输)
- 流水线传输N个对象 = 1 RTT(建立TCP)+ 1 RTT(所有请求/响应)
2.5 Cookie
由于HTTP是无状态的,服务器无法区分不同的客户端。Cookie机制用于在客户端维护状态信息。
Cookie的工作过程:
- 客户端首次访问服务器
- 服务器在响应首部中设置
Set-Cookie字段,包含一个唯一的标识符 - 客户端(浏览器)保存该Cookie
- 客户端后续每次请求都会在
Cookie首部中携带该标识符 - 服务器根据Cookie识别客户端,维护会话状态
Cookie的存储位置:
- 内存Cookie:浏览器关闭后消失
- 持久Cookie:保存在硬盘上,设置过期时间后自动删除
2.6 Web缓存(代理服务器)
Web缓存(Web Cache)又称代理服务器(Proxy Server),位于客户端和源服务器之间,可以缓存经常访问的网页副本。
Web缓存的工作过程:
- 客户端向代理服务器发送请求
- 代理服务器检查缓存:
- 缓存命中:直接返回缓存的内容给客户端
- 缓存未命中:代理服务器向源服务器请求内容,缓存后返回给客户端
Web缓存的优势:
- 减少客户端的响应时间(缓存命中时)
- 减少源服务器的负载
- 减少网络带宽消耗
2.7 条件GET
为了确保缓存内容是最新的,HTTP使用**条件GET(Conditional GET)**机制:
- 缓存记录资源的最后修改时间(Last-Modified)或ETag
- 客户端再次请求时,在请求首部中添加
If-Modified-Since或If-None-Match - 服务器检查资源是否修改:
- 未修改:返回304 Not Modified(无实体体),客户端继续使用缓存
- 已修改:返回200 OK和新的资源内容
2.8 HTTP/1.0 vs HTTP/1.1 vs HTTP/2
| 特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2 |
|---|---|---|---|
| 连接方式 | 非持久连接 | 默认持久连接 | 多路复用 |
| 流水线 | 不支持 | 支持(但实际少用) | 支持 |
| 头部压缩 | 无 | 无 | HPACK压缩 |
| 服务器推送 | 不支持 | 不支持 | 支持 |
| 数据格式 | 文本 | 文本 | 二进制帧 |
| Host字段 | 不要求 | 必须 | 必须 |
三、记忆与理解辅助
口诀:"HTTP无状态TCP上,80端口默认藏;持久连接省RTT,Cookie帮你记身份"——记住HTTP的核心特点。
RTT记忆法:非持久连接=2RTT/对象,持久连接=1RTT/对象,流水线≈1RTT+N个对象。记住"握手一RTT,传输一RTT"。
对比表:非持久连接 vs 持久连接
| 对比项 | 非持久连接 | 持久连接 |
|---|---|---|
| TCP连接数 | 每个对象一个 | 多个对象复用一个 |
| RTT开销 | 2 RTT/对象 | 1 RTT/对象(建立后) |
| 服务器负载 | 高(频繁建立连接) | 低 |
| HTTP版本 | 1.0默认 | 1.1默认 |
- 场景记忆:非持久连接像"每次买东西都重新建一个仓库",持久连接像"仓库建好后一直用",流水线像"一口气下多个订单,仓库统一发货"。
四、例题与精解
例题1(基础巩固)
题目:使用HTTP/1.1的持久连接(非流水线模式)传输一个HTML页面和页面中的5个图片(共6个对象),假设TCP建立连接需要1个RTT,每个对象传输需要1个RTT,则总时间为( )个RTT。如果使用非持久连接,总时间为( )个RTT。
A. 7, 12
B. 6, 12
C. 7, 7
D. 6, 7
命题意图:考查持久连接与非持久连接的RTT计算差异。
精解:
审题分析:需要分别计算两种连接模式下的总RTT。
解题思路:
- 非持久连接:每个对象需要独立的TCP连接,每个连接=1RTT(握手)+1RTT(传输)
- 持久连接:TCP连接只建立一次=1RTT,之后每个对象1RTT
完整步骤:
持久连接(非流水线):
- TCP建立连接:1 RTT
- 第1个对象(HTML页面):1 RTT
- 第2~6个对象(5个图片):每个1 RTT,共5 RTT
- 总时间 = 1 + 6 = 7 RTT
非持久连接:
- 每个对象:1 RTT(TCP握手)+ 1 RTT(传输)= 2 RTT
- 6个对象共:6 × 2 = 12 RTT
方法反思:持久连接的优势在于TCP连接只建立一次。非流水线模式下,虽然每个对象仍需1 RTT传输,但省去了重复的TCP握手开销。如果使用流水线模式,理论上所有请求可以一次发出,总时间只需1+1=2 RTT。
答案:A
例题2(中等提升)
题目:某用户在浏览器中输入URL http://www.example.com/index.html 并回车。假设浏览器需要通过DNS解析域名为IP地址(本地DNS缓存未命中,需1个RTT),TCP建立连接需要1个RTT,HTTP请求和响应需要1个RTT。则从用户按下回车到页面完全显示的最短时间为( )个RTT。如果浏览器事先已经知道服务器的IP地址(无需DNS解析),且TCP连接已经建立(持久连接),则最短时间为( )个RTT。
A. 4, 1
B. 3, 1
C. 4, 2
D. 3, 2
命题意图:考查Web页面加载过程中的各环节耗时分析。
精解:
审题分析:需要分析从输入URL到页面显示的完整过程,计算各环节的RTT。
解题思路:完整过程 = DNS解析 + TCP建立 + HTTP传输。各环节可以部分并行。
完整步骤:
情况1(需要DNS解析,需要建立TCP):
- DNS解析:1 RTT
- TCP建立连接:1 RTT
- HTTP请求和响应:1 RTT
- 注意:DNS解析必须先完成才能建立TCP连接(需要IP地址),TCP建立后才能发送HTTP请求
- 总时间 = 1 + 1 + 1 = 3 RTT
情况2(无DNS,TCP已建立):
- DNS解析:0(已知IP)
- TCP建立:0(已建立)
- HTTP请求和响应:1 RTT
- 总时间 = 1 RTT
方法反思:Web页面加载的时间分析需要考虑各个环节的串行/并行关系。DNS解析→TCP建立→HTTP传输是串行的。在实际中,浏览器会并行发起DNS解析和TCP预连接等优化,但考研中按最简单的串行模型计算。
答案:B
五、考情分析
- 考查频次:近5年408真题中HTTP/WWW相关题目约出现5~8次
- 常见题型:选择题(HTTP特点、RTT计算、Cookie机制)和综合题(Web性能分析)
- 分值占比:2~6分
- 命题趋势:近年倾向于考查HTTP的连接管理(持久/非持久/流水线)和RTT分析。Cookie、Web缓存、条件GET也是常考点。HTTP/2的新特性也可能考查
- 基于大纲与命题规律推测
六、易错点提醒
错误表现:认为HTTP是有状态协议
- 错误原因:看到Cookie就以为HTTP有状态
- 正确理解/做法:HTTP本身是无状态协议。Cookie是在应用层实现的状态维护机制,不是HTTP协议本身的功能。HTTP协议本身不保存任何客户端状态。
错误表现:在RTT计算中忽略TCP建立连接的开销
- 错误原因:只关注HTTP传输时间
- 正确理解/做法:非持久连接下,每个对象都需要先建立TCP连接(1 RTT),再传输数据(1 RTT),共2 RTT/对象。持久连接只需第一次建立TCP(1 RTT)。
错误表现:认为持久连接下所有请求都必须等待前一个响应返回
- 错误原因:混淆了非流水线和流水线模式
- 正确理解/做法:非流水线模式确实需要等待前一个响应,但流水线模式允许连续发送多个请求不需要等待响应。不过实际中流水线使用较少(队头阻塞问题)。
错误表现:认为GET请求没有请求体,POST请求必须有请求体
- 错误原因:对HTTP方法的理解不准确
- 正确理解/做法:GET请求可以有请求体(虽然很少使用),POST请求也不一定必须有请求体。两者的本质区别在于语义:GET是获取资源,POST是提交数据。
错误表现:认为Web缓存(代理服务器)一定返回最新的内容
- 错误原因:对缓存机制理解不全面
- 正确理解/做法:Web缓存的内容可能是过期的。条件GET机制(If-Modified-Since)可以在一定程度上保证缓存新鲜度,但不保证实时最新。
七、来源标注
- 依据2026考研统考大纲·计算机网络部分
- 依据《计算机网络(第8版)》谢希仁版
- 依据《计算机网络:自顶向下方法(第8版)》James F. Kurose版
- 依据RFC 7230-7235 - HTTP/1.1, RFC 7540 - HTTP/2