HTTP 是一种请求-响应协议,浏览器(客户端)和服务器通过它进行通信。HTTP/1.0 是早期版本,而 HTTP/1.1 在很多方面做了优化和改进。我们来对比它们的不同之处!
1. 连接方式:短连接 vs 长连接
HTTP/1.0
- 默认是短连接,每次请求都会新建一个 TCP 连接,服务器处理完请求后就关闭连接。
- 问题: 连接的建立和关闭都要消耗资源,每次请求都要重新握手,效率低。
HTTP/1.1
- 默认是长连接(Connection: Keep-Alive)。
- 长连接的好处:
- 只需要建立一次 TCP 连接,可以在一个连接里发送多个请求,减少握手次数,提高效率。
- 避免了 HTTP/1.0 每次请求都要重新建立连接的浪费。
举个例子:
- HTTP/1.0 的短连接
- 你打开网页,浏览器请求 HTML 文件 → 服务器建立连接 → 传输 HTML → 关闭连接。
- 你请求 CSS 文件 → 服务器再建连接 → 传输 CSS → 关闭连接。
- 你请求 图片 → 服务器再建连接 → 传输图片 → 关闭连接。
- 每次请求都要重新建立连接,太慢了!
- HTTP/1.1 的长连接
- 一次连接可以发送多个请求,HTML、CSS、图片可以复用同一个连接,减少不必要的开销,加载更快!
2. 缓存机制
HTTP/1.0
- 主要用
Expires
和If-Modified-Since
来做缓存判断:Expires
(过期时间): 服务器告诉浏览器,这个资源的过期时间(比如Expires: Mon, 25 Dec 2024 12:00:00 GMT
),在这个时间之前,浏览器可以直接用缓存。问题:Expires
用的是绝对时间,容易受到客户端时间的影响。If-Modified-Since
(如果修改时间符合): 如果资源有Last-Modified
时间,浏览器下次请求时带上If-Modified-Since
,服务器会比对它和Last-Modified
,如果资源没更新,返回 304 Not Modified(不用重新下载,直接用缓存)。
HTTP/1.1
- 增加了
Cache-Control
头,提供更强大的缓存控制:max-age=N
:设置缓存的有效时间(相对时间),比Expires
更稳定。no-cache
:必须跟服务器确认后才能使用缓存(协商缓存)。no-store
:不允许缓存(比如敏感数据)。private
/public
:控制缓存范围(只能浏览器缓存 / 浏览器和代理服务器都能缓存)。
- 增加了
ETag
机制:ETag
(实体标签)是一个资源的唯一标识,如果资源变化了,ETag
也会改变。- 客户端下次请求会带上
If-None-Match
,服务器会比对ETag
,如果相同,就返回 304 Not Modified。
区别总结:
HTTP/1.0 | HTTP/1.1 |
---|---|
只支持 Expires 和 If-Modified-Since | 新增 Cache-Control 和 ETag |
过期时间是绝对时间,受本地时间影响 | max-age 是相对时间,更稳定 |
只支持简单的缓存控制 | 允许更细粒度的缓存策略 |
3. 管道化(Pipelining)
HTTP/1.0
- 请求是串行的:一个请求发出去后,必须等到服务器返回后,才能发下一个请求。
HTTP/1.1
- 支持管道化(Pipelining):
- 多个请求可以同时发出,但服务器还是得按顺序返回。
- 问题:服务器不能乱序返回,可能会造成队头阻塞(第一个请求慢了,后面的都被卡住)。
- HTTP/2 解决了这个问题,支持多路复用(请求和响应可以乱序传输)。
4. 增加 Host
头
HTTP/1.0
- 没有
Host
头,每个 IP 地址只能对应一个网站。
HTTP/1.1
- 必须有
Host
头,服务器可以根据Host
头识别多个网站。 - 好处:一个服务器可以托管多个网站(虚拟主机)。
5. 状态码的变化
HTTP/1.0
- 状态码相对较少,比如:
200 OK
302 Found
404 Not Found
HTTP/1.1
- 新增了 24 个错误状态码,包括:
100 Continue
:请求还没结束,可以继续发送数据(大文件上传时有用)。206 Partial Content
:支持断点续传。409 Conflict
:资源冲突,比如编辑同一个文档时产生冲突。418 I'm a teapot
(彩蛋状态码,不能用来泡茶🤣)。
6. 带宽优化
HTTP/1.0
- 客户端请求的资源必须是整个文件,如果是大文件,只能整个下载,浪费带宽。
HTTP/1.1
- 支持
Range
头,可以请求资源的部分内容,比如:- 断点续传(
Range: bytes=500-1000
,只请求 500-1000 字节)。 - 视频、音乐流式加载,不需要一次下载完整文件。
- 断点续传(
总结:HTTP/1.0 vs HTTP/1.1
特性 | HTTP/1.0 | HTTP/1.1 |
---|---|---|
连接 | 短连接,必须重新建立 TCP 连接 | 默认长连接(Keep-Alive) |
缓存 | 只支持 Expires ,If-Modified-Since | 支持 Cache-Control ,ETag |
管道化 | 不支持 | 支持管道化,但仍然有阻塞问题 |
Host 头 | 没有,无法一个服务器托管多个网站 | 必须有 Host 头 |
状态码 | 状态码少 | 新增 24 个状态码 |
带宽优化 | 只能整个文件下载 | 支持断点续传(Range 头) |
总结
HTTP/1.1 比 HTTP/1.0 更加高效,解决了很多 1.0 的缺点:
✅ 长连接减少 TCP 开销
✅ 更强的缓存机制提高性能
✅ 支持断点续传、带宽优化
✅ 支持管道化,部分提升并发能力
现在 绝大部分网站都在用 HTTP/1.1,但 HTTP/2 和 HTTP/3 在性能上更进一步,未来会慢慢取代 HTTP/1.1 🚀。