HTTP/1.0 vs HTTP/1.1:全面解析

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

  • 主要用 ExpiresIf-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.0HTTP/1.1
只支持 ExpiresIf-Modified-Since新增 Cache-ControlETag
过期时间是绝对时间,受本地时间影响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.0HTTP/1.1
连接短连接,必须重新建立 TCP 连接默认长连接(Keep-Alive)
缓存只支持 ExpiresIf-Modified-Since支持 Cache-ControlETag
管道化不支持支持管道化,但仍然有阻塞问题
Host没有,无法一个服务器托管多个网站必须有 Host
状态码状态码少新增 24 个状态码
带宽优化只能整个文件下载支持断点续传(Range 头)

总结

HTTP/1.1 比 HTTP/1.0 更加高效,解决了很多 1.0 的缺点:

长连接减少 TCP 开销

更强的缓存机制提高性能

支持断点续传、带宽优化

支持管道化,部分提升并发能力

现在 绝大部分网站都在用 HTTP/1.1,但 HTTP/2 和 HTTP/3 在性能上更进一步,未来会慢慢取代 HTTP/1.1 🚀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值