前言
互联网的初期,网页只是简单的纯文本。随着多媒体需求的爆发,HTTP 协议经历了一次史诗级的进化。本文将带你回顾这段历史,理解请求头、响应头以及状态码这些我们每天都在使用的技术是如何诞生的。
一、 HTTP/0.9:为纯文本而生的“单行协议”
背景: 1991 年发布,当时仅用于传输体积微小的 HTML 文件。
1. 核心特点
- 极致精简:只有一个请求行(如
GET /index.html),没有请求头和请求体。 - 无语义响应:服务器不返回任何头信息,直接传输数据。
- 纯文本传输:数据均以 ASCII 字符流 传输,无法处理图片、视频等二进制数据。
2. 请求流程
- 建立连接:基于 TCP 协议,进行三次握手。
- 发送请求:发送单行 GET 命令。
- 返回数据:服务器读取 HTML 并以字符流形式返回。
- 断开连接:数据传输完毕,立即断开 TCP 连接。
二、 HTTP/1.0:开启多媒体传输的新纪元
产生背景: 互联网高速发展,浏览器需要展示 JavaScript、CSS、图片、音视频等多种类型的文件。HTTP/1.0 的核心诉求就是支持多种类型文件的下载。
1. 核心新特性
- 引入请求头与响应头:通过 Headers 协商传输细节,支持多媒体传输。
- 引入状态码:让浏览器知道请求是成功(200)还是失败(404/500)。
- Cache 机制:支持缓存已下载数据,减轻服务器压力。
- 用户代理 (User-Agent) :统计客户端基础信息(如系统版本、浏览器类型)。
2. 新增请求头和响应头:强大的 Headers
HTTP/1.0 允许客户端通过请求头告诉服务器它的“喜好”,服务器再通过响应头进行确认。
🔹 客户端的“期望”(Request Headers)
Accept: text/html /* 期望返回的文件类型 */
Accept-Encoding: gzip, br /* 期望的压缩方式 */
Accept-Charset: utf-8 /* 期望的字符编码 */
Accept-Language: zh-CN, zh /* 期望的优先语言 */
User-Agent: Mozilla/5.0... /* 客户端的基础信息 */
🔹 服务器的“反馈”(Response Headers)
服务器根据客户端的期望,处理后告知其实际结果:
Content-Type: text/html; charset=UTF-8 /* 实际返回的类型与编码 */
Content-Encoding: br /* 实际采用的压缩算法 */
三、 总结与思考
HTTP/1.0 的出现彻底改变了万维网的面貌,它引入的头部字段和状态码直到今天依然是 HTTP 协议的核心。
⚠️ 存在的局限: 虽然 HTTP/1.0 功不可没,但它依然延续了 HTTP/0.9 的一个致命弱点:每个 TCP 连接只能发送一个请求。在那个网页图片越来越多的时代,频繁建立和断开 TCP 连接造成了巨大的性能开销。这也引出了我们下一篇的主角——HTTP/1.1 与持久连接。