Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : HTTP/1.0 和 HTTP/1.1 的区别是什么?
【简要回答】
HTTP/1.0 和 HTTP/1.1 的概念
- HTTP/1.0:
- 默认使用短连接(每次请求后关闭 TCP 连接),支持非标准长连接(需手动添加
Connection: keep-alive请求头。 - HTTP/1.0 性能开销大,且不适合频繁请求的情况。
- 默认使用短连接(每次请求后关闭 TCP 连接),支持非标准长连接(需手动添加
- HTTP/1.1:
- 默认使用标准化长连接(无需额外手动设置),支持复用 TCP 连接处理多个请求。
- HTTP/1.1 复用TCP连接,减少了连接开销,提高了性能,但连接管理更复杂。
HTTP/1.0 和 HTTP/1.1 的区别
-
如下表所示:
核心区别 HTTP/1.0 HTTP/1.1 默认连接 短连接(需手动启用长连接) 长连接(标准化) Host 头 不支持 支持(单 IP 托管多域名) 分块传输编码 不支持 支持(动态内容流式传输) 缓存机制 仅 Expires / Last-Modified 新增 ETag / Cache-Control 队头阻塞问题 无(因短连接) 存在(长连接顺序处理请求) 范围请求 不支持 支持断点续传 状态码扩展 基础状态码(如 200、404) 新增 100、409、410 等状态码
【详细回答】
HTTP/1.0 和 HTTP/1.1 的概念
- HTTP/1.0短连接:
- 定义:
在HTTP/1.0中,默认情况下,每次HTTP请求完成后会关闭TCP连接。 - 过程:
① 浏览器与服务器通过三次握手建立TCP连接。
② 浏览器发送HTTP请求,服务器返回HTTP响应。
③ 服务器关闭TCP连接。 - 缺点:
① 性能开销大:每次请求都需要建立和关闭TCP连接,增加了延迟和资源消耗。
② 不适合频繁请求:对于需要多次请求的页面(如加载多个资源),性能较差。
- 定义:
- HTTP/1.1长连接:
- 定义:
- 在HTTP/1.1中,默认使用长连接,允许在同一个TCP连接上发送多个HTTP请求和响应。
- 因为长连接是默认的,所以客户端和服务器通常不需要再发送 Connection: keep-alive。浏览器和服务器都会默认这么做。
- 但是,为了兼容老的代理服务器或明确表示意图,很多客户端仍然会在请求头中携带它。
- 过程:
① 浏览器与服务器通过三次握手建立TCP连接。
② 浏览器发送多个HTTP请求,服务器返回多个HTTP响应。
③ 当连接空闲一段时间后,服务器或浏览器会关闭TCP连接。 - 优点:
① 减少连接开销:由于复用TCP连接,减少了建立和关闭连接的开销。
② 提高性能:适合需要多次请求的页面(如加载多个资源)。 - 缺点:
连接管理复杂:需要处理连接的复用和超时关闭。
- 定义:
HTTP/1.0 和 HTTP/1.1 的区别
- 默认的连接管理方式:
- HTTP/1.0:
每次请求后关闭 TCP 连接,将会导致频繁的三次握手和四次挥手。
虽然可通过非标准头Connection: keep-alive启用长连接,但依赖服务器实现。 - HTTP/1.1:
它采用标准化长连接,默认复用 TCP 连接来处理多个请求,减少了连接开销。
可通过Keep-Alive: timeout=30设置空闲超时时间(默认约 5-15 秒)。
- HTTP/1.0:
- Host 头的支持:
- HTTP/1.0:
不支持 Host 头,一个 IP 地址只能绑定一个域名,无法支持虚拟主机。 - HTTP/1.1:
支持 Host 头字段,客户端必须在请求中指定域名(如Host: programmercarl.com);Host 头字段为云计算和共享主机提供了基础,它允许单服务器托管多个网站。
- HTTP/1.0:
- 分块传输编码(Chunked Transfer Encoding):
- HTTP/1.0:
必须预先知道响应内容长度(通过Content-Length头),无法动态生成内容。 - HTTP/1.1:
支持分块传输,服务器可以通过Transfer-Encoding: chunked响应头来分块发送动态内容,尤其适用于实时日志流、大文件下载等场景。
- HTTP/1.0:
- 缓存机制的优化
- HTTP/1.0:
强缓存仅支持Expires(绝对过期时间);
协商缓存仅支持Last-Modified / If-Modified-Since(最后修改时间)。 - HTTP/1.1:
强缓存新增了Cache-Control(如max-age=3600相对时间)。
协商缓存新增了ETag(文件哈希值)和If-None-Match实现了更精准的缓存验证。
- HTTP/1.0:
- 队头阻塞问题(Head-of-Line Blocking)
- HTTP/1.0:
无队头阻塞问题(因为短连接每次请求都要独立处理)。 - HTTP/1.1:
支持管道化(Pipelining),即允许客户端在未收到前一个响应时,继续通过同一TCP连接发送多个请求(无需等待响应),但服务器还是必须按顺序返回响应。这样的话,如果某个请求处理缓慢(如复杂查询),后续的响应就会被阻塞,实际应用中被浏览器默认禁用。
- HTTP/1.0:
- 范围请求(Range Requests)
- HTTP/1.0:
不支持部分内容请求,必须下载完整资源。 - HTTP/1.1:
允许浏览器通过Range: bytes=0-499请求部分内容,服务器返回206 Partial Content和Content-Range头。eg:视频拖动播放、断点续传下载。
- HTTP/1.0:
- 状态码的扩展情况
- HTTP/1.0:
仅支持基础状态码(如 200 OK、404 Not Found)。 - HTTP/1.1:
新增 100、409、410 等状态码,总数扩展至 40+,
其中 100,409,410 状态码如下:
100 Continue:表示客户端发送请求体前,服务器要确认接收请求头。
409 Conflict:表示此次请求与资源当前状态冲突(如并发编辑冲突)。
410 Gone:表示资源已永久删除(比 404 更加明确)。
- HTTP/1.0:
【知识拓展】
一图胜千言
- HTTP/1.0 和 HTTP/1.1 关键区别,如下图所示:
HTTP and TCP Relationship
- HTTP (Hypertext Transfer Protocol) and TCP (Transmission Control Protocol) are fundamental components of web communication, each playing distinct roles:
- Layered Architecture:
- TCP operates at the transport layer (Layer 4) of the OSI model, ensuring reliable, ordered, and error-checked data delivery between devices.
- HTTP operates at the application layer (Layer 7), defining how clients (e.g., browsers) and servers format and exchange messages (e.g., requests for web pages).
- Dependency:
- HTTP relies on TCP to establish and manage connections. Before sending an HTTP request, a TCP connection is established via a three-way handshake.
- Example: When you visit a website, your browser uses TCP to create a stable channel, then sends HTTP requests (e.g.,
GET /index.html HTTP/1.1) over this channel.
- Connection Management:
- HTTP/1.0: Used short-lived TCP connections (one request per connection), leading to high overhead.
- HTTP/1.1: Introduced persistent connections, reusing a single TCP connection for multiple requests, reducing latency and improving efficiency.
- Evolution Beyond TCP:
- HTTP/2 retained TCP but added multiplexing to mitigate head-of-line blocking.
- HTTP/3 abandoned TCP and adopted QUIC (a UDP-based protocol) to further reduce latency and address TCP's limitations in modern networks.
- Layered Architecture: