首页/计算机网络/06-application/HTTP协议 🔗 在 Obsidian 中打开
计算机网络 · 06-application

HTTP协议

难度 ★★★重要度 ★★ 考查频率 低 计算机网络/应用层HTTP万维网Web
速查
HTTP 是 WWW 的核心协议,基于 TCP 端口 80无状态。HTTP/1.0 默认非持久连接,HTTP/1.1 默认持久连接。用 Cookie/Session 弥补无状态。常见状态码:2xx 成功、3xx 重定向、4xx 客户端错、5xx 服务端错。

核心概念

HTTP(HyperText Transfer Protocol,超文本传输协议)是万维网(WWW)的核心协议,用于 Web 浏览器与 Web 服务器之间的通信。HTTP 是应用层协议,基于 TCP 传输(HTTP/1.0 和 HTTP/1.1),端口号为 80。HTTP 是无状态协议,服务器不保存客户端的历史请求信息,这通过 Cookie 和 Session 机制来弥补。

HTTP 报文分为请求报文和响应报文。请求报文包含:请求行(方法、URL、版本)、请求头部(Header)和请求体(Body)。常见请求方法有 GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)。响应报文包含:状态行(版本、状态码、原因短语)、响应头部和响应体。常见状态码:200(成功)、301(永久重定向)、302(临时重定向)、304(未修改,使用缓存)、400(客户端错误)、403(禁止)、404(未找到)、500(服务器内部错误)。

HTTP/1.0 默认非持久连接(每次请求建立新 TCP 连接),HTTP/1.1 默认持久连接(同一 TCP 连接上可发送多个请求/响应)。持久连接有两种工作方式:非流水线(收到响应后才发下一个请求)和流水线(不等响应就发下一个请求)。HTTP/2 引入了多路复用、头部压缩和服务器推送等特性。

关键定义

概念定义
URL统一资源定位符,格式为 协议://主机:端口/路径
Cookie服务器发送给客户端的小型数据,用于维持状态
Session服务器端保存的用户会话信息,通过 Session ID 关联
状态码三位数字,表示请求的处理结果(1xx~5xx)
持久连接同一 TCP 连接上可传输多个 HTTP 请求/响应(HTTP/1.1 默认)
非持久连接每个请求/响应对使用独立的 TCP 连接(HTTP/1.0 默认)
流水线不等待响应就连续发送请求,提高效率
代理服务器位于客户端和服务器之间的中间实体,可缓存和过滤请求

常见考法

考点说明
HTTP 报文格式请求行/状态行、头部字段、空行、正文的结构
状态码分类1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务器错误
持久/非持久连接HTTP/1.0 默认非持久,HTTP/1.1 默认持久;计算页面加载时间
Cookie 与 SessionHTTP 无状态性及其解决方案
GET 与 POSTGET 参数在 URL 中、可缓存;POST 参数在 Body 中、不可缓存
页面加载时间计算非持久:n 个对象需 2n 个 RTT;持久非流水线:1+(n) 个 RTT

易错点

必记
  • HTTP 是无状态的,但借助 Cookie/Session 可以实现有状态的交互,不要混淆。
  • HTTP/1.0 默认非持久连接,HTTP/1.1 默认持久连接,这是常考易混点。
  • 非持久连接传输一个页面(含 n 个对象)需要 2(n+1) 个 RTT(TCP 连接建立 + HTTP 请求各 1 个 RTT)。
  • 持久非流水线连接传输一个页面需要 (n+1) 个 RTT。
  • HTTP 本身不加密,$HTTPS = HTTP + TLS/SSL$,端口 443。
  • Cookie 存储在客户端,Session 存储在服务器端。

核心结论

  1. HTTP 是无状态的应用层协议,基于 TCP 传输(端口 80),支持 GET/POST 等请求方法。
  2. HTTP/1.0 默认非持久连接(每个对象新建 TCP),HTTP/1.1 默认持久连接(复用 TCP 连接)。
  3. Cookie 机制通过在客户端存储状态信息来弥补 HTTP 的无状态性。
  4. 状态码分类:1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务器错误。
  5. 页面加载时间计算是 408 常考题型,需区分持久/非持久、流水线/非流水线。

记忆卡片

HTTP/1.0 和 HTTP/1.1 默认连接方式?
HTTP/1.0 默认 非持久连接(每请求新建 TCP);HTTP/1.1 默认 持久连接(复用 TCP)。
HTTP 无状态,如何实现有状态交互?
通过 Cookie(客户端存储)和 Session(服务器端存储)机制弥补。
非持久连接传 n 个对象要多少 RTT?
2(n+1) 个 RTT(每个对象:1 个 RTT 建 TCP + 1 个 RTT 传 HTTP)。
301、304、404 分别表示?
301 永久重定向,304 未修改(用缓存),404 未找到资源。
GET 和 POST 的核心区别?
GET 参数在 URL 中、可缓存、幂等;POST 参数在 Body 中、不可缓存、非幂等。

交互动画 · 持久 vs 非持久连接

客户端 服务器 对象1:新建TCP 对象2:新建TCP 对象3:新建TCP
非持久:每取一个对象都要新建并断开一次 TCP 连接
示意图:非持久连接对象数 = 连接数;持久连接多个对象复用同一条 TCP。
手动模式
客户端 服务器 请求报文 响应报文 请求报文 响应报文 GET /index.html HTTP/1.1请求行 Host + User-Agent请求头 <CRLF>空行 POST 时才有数据请求体 HTTP/1.1 200 OK状态行 Content-Type: text/html响应头 <CRLF>空行 <html>...</html>响应体
请求行:方法 + URL + 版本,例如 GET /index.html HTTP/1.1
HTTP/1.1 默认持久连接;HTTP/1.0 默认非持久连接

相关知识点

https-protocol dns-domain-name-system

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。