HTTP 简介

在拆解报文结构之前,我们先搞清楚 HTTP 到底是什么、怎么来的、为什么它如此重要。理解背景,后面学到细节时就不会觉得突兀。

HTTP 是什么?

HTTP 是 HyperText Transfer Protocol(超文本传输协议)的缩写,它是应用层的客户端-服务器协议。说人话就是:浏览器(客户端)按某种格式发请求,服务器按同一种格式返回响应,这套格式就是 HTTP。

它工作在 TCP/IP 模型中的应用层,下面通常走 TCP(HTTP/3 走 QUIC/UDP)。默认端口:HTTP 用 80,HTTPS 用 443

诞生简史:Web 的同发明人

HTTP 由英国科学家 Tim Berners-Lee 在 1989 年于欧洲核子研究组织(CERN)提出,和他同时发明的还有 HTML 和 URL——三者合起来就是万维网(World Wide Web)。HTTP 最早的版本非常简单,几经演进:

HTTP 的核心特点

"无状态"是什么意思?为什么要有 Cookie?

无状态(Stateless)是 HTTP 最重要的设计哲学:服务器不保存客户端的任何上下文。对服务器来说,你的第 1 个请求和第 100 个请求完全独立,它不会自动把它们关联起来。

# 第 1 次请求
GET /cart HTTP/1.1
Host: shop.example.com
# 服务器响应: 你购物车是空的

# 第 2 次请求(用户点了"加入购物车"之后)
POST /cart HTTP/1.1
Host: shop.example.com
Content-Type: application/x-www-form-urlencoded

item=apple&qty=2

# 第 3 次请求(再看购物车)
GET /cart HTTP/1.1
Host: shop.example.com
# 服务器为什么还记得购物车有 apple?
# 因为第 2 次响应里服务器发了一个 Set-Cookie,后续请求自动带上

这带来了好处:服务器实现简单、易水平扩展(任何一台服务器都能处理任意请求)、不用清理过期会话。但也带来麻烦:购物车、登录态这种"需要记住用户"的场景怎么办?答案是 Cookie + Session——服务器在响应里发一个小令牌,浏览器后续请求自动带上,服务器据此识别同一用户。详见本系列第 7 篇 Cookie 与 Session

HTTP 版本演进:为什么越来越快?

网页从早期的"一个 HTML"变成现在"上百个 JS/CSS/图片资源",HTTP 协议本身也在拼命提速:

# HTTP/1.1 — 多个请求需要排队(或开多个 TCP 连接)
GET /a.css HTTP/1.1     <-- 请求 1
GET /b.css HTTP/1.1     <-- 请求 2 (要等请求 1 响应完)
GET /c.css HTTP/1.1     <-- 请求 3 (继续等)

# HTTP/2 — 一个连接多路复用,可以并发
:method: GET  :path: /a.css   <-- 同时发出
:method: GET  :path: /b.css   <-- 同时
:method: GET  :path: /c.css   <-- 同时

# HTTP/3 — 基于 QUIC(UDP),连接建立更快,
# 切换 WiFi/4G 不掉线

对你开发而言:写代码时几乎感知不到版本差异——语义(方法、状态码、头)是同一套,只是底层传输不同。

HTTP 与 HTTPS 的关系

HTTP 明文传输,任何人(运营商、黑客、WiFi 提供方)都能看到、能改。HTTPS = HTTP + TLS/SSL 加密层:传输内容被加密、服务器身份被证书证明。现代 Web 几乎强制 HTTPS——浏览器把 HTTP 站点标"不安全",Google 也把它作为排名因素。详见第 8 篇 HTTPS 与 SSL/TLS

本系列的学习目标

读完这 9 篇,你将能:

← 返回 HTTP 教程目录

下一篇 HTTP 报文结构

✈️💬