本地资料万维网
SCHEDULE LOCAL中优先级9 个小节覆盖真题 20112024
做相关真题 · 5 道选中文字可高亮或加下划线
选中文字高亮 · 下划线

万维网

真题练习

经常在选择题中考查 HTTP 协议的几个特性,包含 HTTP 的基本方法和状态码以及几个关键字段。

WWW

WWW,也称 万维网(World Wide Web),是由互相链接的文档与资源组成的信息系统。资源用 统一资源标识符(URI)标识;URL 是 URI 中强调资源位置与访问方式的一类。用户通过浏览器访问这些资源。

组成结构

  1. URL (统一资源定位符):每个网页或资源都有一个唯一的地址,称为 URL,它定义了资源的位置和如何访问它。
  2. HTTP/HTTPS (超文本传输协议/安全超文本传输协议):这是用于从服务器传输网页到浏览器的协议。
  3. HTML (超文本标记语言):大多数网页使用 HTML 编写,它是用于描述和呈现超文本的标准标记语言。

HTTP 协议

HTTP(超文本传输协议)是应用层协议,用于客户端和服务器之间传输资源与控制信息。HTTP/1.1 和 HTTP/2 通常运行在 TCP 之上;HTTP/3 运行在基于 UDP 的 QUIC 之上,所以不能把所有 HTTP 版本都概括为“基于 TCP”。HTTPS 表示 HTTP 经过 TLS 提供机密性、完整性和服务器认证。

无状态

HTTP 本身是 无状态 的:协议不会自动把不同请求关联为同一应用会话。应用可以借助 Cookie、服务器端 Session、令牌等机制维护状态;这不改变 HTTP 协议本身无状态的性质。

报文组成

HTTP 请求和响应由起始行、首部字段、空行与可选消息体组成

上图展示了 HTTP 协议的几个重要组成部分,对于考试而言,重点关注 以下字段:

  1. 请求和响应HTTP 通信通常包括 客户端服务器 发送 请求,然后 服务器 返回 响应 的过程。
  2. 方法HTTP 定义了一组 请求方法,用于表示对资源的不同操作:
    • GET:请求指定资源。
    • POST:提交数据以供处理。
    • PUT:更新指定资源。
    • DELETE:删除指定资源。
    • HEAD:与 GET 相似,但只请求资源的头部信息。
  3. 状态码:响应返回一个 状态码,用于表示请求的结果,例如:
    • 200 OK:请求成功。
    • 404 Not Found:资源未找到。
    • 500 Internal Server Error:服务器内部错误。
    • 以及其他众多 状态码,用于表示不同的响应状态。
  4. 头部字段HTTP 请求响应都包含 头部信息,提供有关请求或响应的元数据,例如 Content-Type(内容类型)或 User-Agent(用户代理)。
  5. 消息体:请求或响应可包含主体,例如 POST 提交的数据或服务器返回的网页内容;并非所有报文都有消息体。

关键机制

以下首部字段可能在考试中被考察,需要了解一下:

持久连接与非持久连接

持久连接复用一个连接传输多个请求,非持久连接为资源重复建连

长连接和短连接含义

HTTP 可使用 持久连接(长连接)或 非持久连接(短连接)。这不是一个名为 keepalive 的独立选项,而由 HTTP 版本默认规则和 Connection 首部等共同决定。

  • 长连接

    (persistent connection)可在一个传输连接中处理多个 HTTP 请求,减少重复握手开销。

  • 短连接

    (non-persistent connection)通常为每个请求/资源建立单独连接,请求响应完成后关闭。

HTTP 不同版本中的 keepalive

  • HTTP/1.0 中,持久连接 不是默认行为。要在 HTTP/1.0 中启用它,必须在请求头部添加 Connection: keep-alive
  • HTTP/1.1 中及之后,持久连接 是默认行为。如果想关闭它,必须在请求或响应头部添加 Connection: close

流水线、多路复用与队头阻塞

非流水线等待前一响应,HTTP 1.1 流水线可连续发送多个请求

HTTP 流水线和非流水线含义

  • 流水线HTTP Pipelining):HTTP 客户端在未等待前一个请求的响应的情况下,连续发送多个 HTTP 请求。
  • 非流水线Non-pipelined):HTTP 客户端必须接收到上一个请求的响应,才能发送下一个请求。

HTTP 不同版本中的流水线支持

  • HTTP/1.0 中,流水线 的功能并不支持。
  • HTTP/1.1 中,引入了 HTTP 流水线 的支持,但由于使用中队头阻塞的问题,应用并不广泛。
  • HTTP/2 中,请求和响应被拆为带流标识的帧,可在一个连接中多路复用,解决 HTTP/1.1 应用层按响应顺序造成的队头阻塞;但所有流共享一条 TCP 连接,丢失一个 TCP 段时仍会出现传输层队头阻塞。
  • HTTP/3 基于 QUIC,让不同流在传输层相互独立,从而进一步缓解跨流队头阻塞。

什么是队头阻塞?

当多个请求被排成队列时,如果第一个请求由于某种原因(如延迟、丢包或慢速响应)未能及时处理,那么后续的所有请求都必须等待第一个请求的响应完成才能被处理。

非流水线 HTTP/1.1 必须等待前一响应后再发下一请求;HTTP/1.1 流水线能连续发送请求,但服务器仍按顺序返回响应。HTTP/2 可交错传输多个流的帧,所以不能简单概括为“HTTP/2 之前绝对不能并发”:浏览器还可建立多条 TCP 连接,只是连接和资源开销更大。

HTTP 协议是 无状态 的,这意味着每个请求都是独立的,服务器 默认情况下无法知道两个请求是否来自同一客户端或用户。Cookie 的引入使得 服务器 能够跨多个请求“识别”和“记住”用户。

服务器用 Set-Cookie 设置状态,浏览器在匹配范围的后续请求中发送 Cookie

HTTP 服务器通过 Set-Cookie 首部字段来设置每一个客户端的 Cookie 值,相应的 HTTP 响应的部分内容如下所示:

HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; Expires=Wed, 21 Oct 2025 07:28:00 GMT; Path=/; Secure; HttpOnly

当浏览器接收到带有 Set-Cookie 字段的 HTTP 响应时,就会在存储该 Cookie 字段,并在下次向对应的 服务器 发送 HTTP 请求时自动将 Cookie 字段添加在 HTTP 首部,之后的 HTTP 请求的部分内容如下所示:

GET /dashboard HTTP/1.1
Cookie: sessionId=abc123

服务器收到带 Cookie 的请求后,可把其中的标识映射到应用会话。浏览器只会在 Domain、Path、Secure、SameSite、过期时间等条件匹配时发送 Cookie;Cookie 不是对“真实用户身份”的自动证明,敏感会话还需防范窃取、固定和跨站请求等风险。