📖 万维网 WWW
🎯 课程摘要:万维网 WWW(万维网) 是运行在因特网上的分布式应用,利用超链接将不同网站的网页链接成逻辑信息网。本节介绍万维网的基本概念、URL(统一资源定位符) 格式、万维网文档(HTML/CSS/JavaScript)、HTTP(超文本传送协议) 的工作原理(持续连接、流水线)、HTTP 报文格式、Cookie 机制以及万维网缓存与代理服务器。
📝 详细笔记
1. 万维网概述
- 概念定义:万维网并非某种特殊的计算机网络,它是一个大规模的联机式信息储藏所,是运行在因特网上的一个分布式应用。
- 核心思想:利用网页之间的超链接,将不同网站的网页链接成一张逻辑上的信息网。
- 发展历史:
- 1989 年 3 月:欧洲粒子物理实验室的蒂姆·伯纳斯·李最初提出
- 1993 年 2 月:诞生世界上第一个图形界面浏览器 Mosaic
- 1995 年:著名的网景浏览器上市
- 主流浏览器及内核:Chrome、Firefox、Safari、Opera、IE 等。浏览器最重要的部分是渲染引擎(浏览器内核),负责对网页内容进行解析和显示。不同内核对网页解析有所不同,同一网页在不同内核浏览器中显示效果可能不同。
2. URL(统一资源定位符)
- 作用:为了方便地访问世界范围的文档,万维网使用 URL(统一资源定位符) 来指明因特网上任何种类资源的位置。
- 一般形式由四部分组成:
<协议>://<主机>:<端口>/<路径>
| 组成部分 | 说明 |
|---|---|
| 协议 | 访问文档采用的协议,如 HTTP |
| 主机 | 存放资源的主机域名或 IP 地址 |
| 端口 | 服务器端口号(HTTP 默认 80,常省略) |
| 路径 | 资源在主机上的路径及网页文件名 |
- ⚠️ 重点/考点:点击网页中的超链接跳转时,协议、主机和端口通常与首页相同,不同的是路径和网页文件。
3. 万维网文档
| 文档类型 | 全称 | 作用 |
|---|---|---|
| HTML | HTML(超文本标记语言) | 使用多种标签描述网页的结构和内容 |
| CSS | 层叠样式表 | 从审美角度描述网页的样式 |
| JavaScript | 脚本语言 | 用来控制网页的行为 |
- 三者编写的万维网文档由浏览器内核负责解释和渲染。
- HTML 常见标签:
<html>(定义文档范围)、<head>(定义首部)、<body>(定义主体)、<title>(网页标题)、<p>(文本段落)、<link>(引入 CSS)、<script>(引入 JS)、<button>(按钮)等。 - 这些文档都部署在服务器端,包括静态页面和服务器后端根据用户需求自动生成的动态页面,需从服务器传送给浏览器解析渲染。
4. HTTP(超文本传送协议) 概述
- 概念定义:HTTP(超文本传送协议) 是 TCP/IP 体系应用层中非常重要的协议,定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
- 工作过程:浏览器进程发起与服务器进程的 TCP 连接(熟知端口号 80),基于该连接发送 HTTP 请求报文,服务器执行相应操作后发回 HTTP 响应报文。
5. HTTP 的连接方式
| 版本 | 连接方式 | 特点 |
|---|---|---|
| HTTP/1.0 | 非持续连接 | 每请求一个文件都要建立 TCP 连接,收到响应后立即关闭;请求一个文档需 2×RTT + 文档传输时延;多个对象需多次 2×RTT 开销 |
| HTTP/1.1 | 持续连接 | 服务器发送响应后仍保持连接,同一客户可继续传送后续请求和响应;还可使用流水线方式(收到响应前连续发送多个请求),节省多个 RTT |
- 非持续连接的时延分析:请求一个万维网文档所需时间 = 2×RTT + 文档传输时延(1 个 RTT 用于 TCP 三报文握手,第 3 个报文载荷携带 HTTP 请求,再 1 个 RTT 用于请求响应)。
- ⚠️ 重点/考点:
- 非持续连接每请求一个文档就有 2×RTT 开销;为减少时延浏览器会建立多个并行 TCP 连接,但会大量占用服务器资源。
- 持续连接的流水线方式:浏览器在收到 HTTP 响应前就能连续发送多个请求报文,减少 TCP 连接空闲时间,提高下载效率。
6. HTTP 报文格式
HTTP 是面向文本的,报文中每个字段都是 ASCII 串,长度不确定。
6.1 HTTP 请求报文
请求行: 方法 URL 版本 CRLF
首部行: 首部字段名: 值 CRLF
...(多个首部行)
空行 CRLF
实体主体(通常不使用)
请求行:方法字段 + 空格 + URL 字段 + 空格 + 版本字段 + CRLF
示例:
GET /... HTTP/1.1
Host: www.hnust.edu.cn
Connection: close
User-Agent: 浏览器类型及版本
Accept-Language: cn
(空行,无实体主体)
6.2 HTTP 请求方法
| 方法 | 含义 |
|---|---|
| GET | 请求读取由 URL 标识的信息(最常用) |
| POST | 向服务器提交数据(如表单提交) |
| HEAD | 请求读取由 URL 标识的信息的元信息(不含实体主体) |
| PUT | 在给定的 URL 下存储/更新文档 |
| DELETE | 删除指定 URL 的资源 |
| CONNECT | 用于代理服务器 |
| OPTIONS | 查询服务器支持的方法 |
| TRACE | 回环测试,用于诊断 |
6.3 HTTP 响应报文
状态行: 版本 状态码 短语 CRLF
首部行: 首部字段名: 值 CRLF
...(多个首部行)
空行 CRLF
实体主体
6.4 HTTP 状态码
状态码共五大类、33 种:
| 类别 | 含义 | 典型示例 |
|---|---|---|
| 1xx | 信息性状态码,表示请求已接收,继续处理 | 100 Continue |
| 2xx | 成功状态码,表示请求已被成功接收、理解、接受 | 200 OK(请求成功)、202 Accepted(接受) |
| 3xx | 重定向状态码,表示需要进一步操作才能完成请求 | 304 Not Modified(文档未修改,用缓存) |
| 4xx | 客户端错误状态码,表示请求有语法错误或无法完成 | 404 Not Found(找不到请求页面) |
| 5xx | 服务器错误状态码,表示服务器未能实现合法请求 | 500 Internal Server Error |
- ⚠️ 重点/考点:浏览器通常不直接显示状态行,而是以友好形式告知用户。304 状态码在代理服务器缓存验证中常用。
7. Cookie 机制
- 背景:早期万维网应用简单,仅查看静态文档,HTTP 被设计为无状态协议以简化服务器设计。现代应用(网上购物、电子商务)需要服务器识别用户。
- 作用:Cookie 提供一种机制,使万维网服务器能够记住用户而无需用户主动提供标识信息,即 Cookie 是一种对无状态的 HTTP 进行状态化的技术。
Cookie 工作原理:
8. 万维网缓存与代理服务器
- 概念定义:万维网缓存(Web Cache)可位于客户机或中间系统上,位于中间系统上的 Web 缓存又称为代理服务器。
- 工作原理:Web 缓存把最近的一些请求和响应暂存在本地磁盘;新请求到达时,若与暂存请求相同,就返回暂存的响应,无需按 URL 地址再次访问因特网资源。
- 作用:若 Web 缓存命中率较高,可大大减少链路通信量,减少主机访问因特网的时延。
缓存一致性验证(条件请求):
| 情况 | 过程 | 结果 |
|---|---|---|
| 文档未过期 | 代理服务器直接返回缓存文档 | 主机获得缓存副本 |
| 文档已过期 | 代理服务器向原始服务器发送含 If-Modified-Since(取值为文档修改日期)首部行的请求 | - |
| 原始服务器文档未修改 | 返回 304 Not Modified 响应(不含实体主体) | 代理服务器更新有效日期后返回缓存文档给主机 |
| 原始服务器文档已修改 | 返回封装有新文档的响应 | 代理服务器更新缓存后返回新文档给主机 |
- ⚠️ 重点/考点:
If-Modified-Since首部字段 + 304 状态码是缓存验证的核心机制。
9. 考研真题解析
| 年份 | 题号 | 答案 | 要点 |
|---|---|---|---|
| 2015 | 40 | C | 请求行指明方法 GET、URL、HTTP 版本(A 对);Host 首部字段值为网站域名(B 对);Connection: close 表示非持续连接,持续连接应为 keep-alive(C 错);Cookie 首部表明浏览器曾访问过该网站(D 对) |
| - | - | - | HTTP 持续连接非流水线方式:请求一个含引用对象的页面,每个对象需单独一个 RTT;从建立 TCP 连接到收到全部内容共 4 个 RTT |
💡 核心总结
- 万维网 = 分布式应用,核心三要素:URL(统一资源定位符)、HTTP(超文本传送协议)、HTML(超文本标记语言)。
- HTTP 默认端口 80;HTTP/1.0 非持续连接(每文档 2×RTT),HTTP/1.1 持续连接 + 流水线方式提高效率。
- HTTP 是无状态协议,Cookie 实现状态化。
- 代理服务器(Web 缓存)通过
If-Modified-Since+ 304 状态码验证缓存一致性,减少时延和流量。 - HTTP 状态码五大类:1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务器错误。
❓ 课后思考 / 经典考题
- URL 的一般形式由哪四部分组成?
- HTTP/1.0 的非持续连接与 HTTP/1.1 的持续连接有何区别?请求一个文档各需多少 RTT?
- 什么是流水线方式?它如何提高 HTTP 效率?
- HTTP 请求报文和响应报文各由哪些部分组成?
- 列举常见的 HTTP 状态码及其含义(200、304、404)。
- 为什么说 HTTP 是无状态协议?Cookie 如何实现状态化?
- 代理服务器如何验证缓存文档是否过期?涉及哪个首部字段和状态码?