http是基于TCP/IP的应用层通信协议,用于定义客户端和服务器之间的通信规则。

http/0.9(1991)

http第一个有记录的版本是1991年提出的http/0.9,他是有史以来简单的协议。

GET /index.html

服务器可能返回以下信息

(res body)
(connection closed)

http/1.0(1996)

Warning

http/1.0的主要缺点之一就是每个连接不能有多个请求。对于任何一个请求,都必须建立在新的连接上,会因为三次握手导致性能浪费。

GET /index.html HTTP/1.0
Host: jinzhe.cc
Accept: */*

服务器可能返回以下信息

HTTP/1.0 200 OK
Content-Type: text/plain
Server: Apache 0.84

(res body)
(connection closed)

http/1.1(1999)

Warning

Content-Length并不能完全解决持久连接的问题,假如说数据是动态的,并且服务端无法知道内容长度,那么客户端就无法知道数据何时结束。
队头阻塞

SPDY(2009)

SPDY的出现并不是取代HTTP,而是在HTTP发出请求之前对其修改。它开始成为事实上的标准,大多数浏览器开始实现它。到了2015年,Google不想出现两个相互竞争的标准,
所以它决定将SPDY合并到HTTP/2.0中并弃用SPDY。

http/2.0(2015)

HTTP/2 专为低延迟内容传输而设计,

三次握手

sequenceDiagram
  客户端 ->> 服务端: SYN `x = random()`
    Note right of 客户端: 客户端发送随机数`x`
  服务端 ->> 客户端 : SYN+ACK `y = random()`;`x+1`
    Note left of 服务端: 服务端返回随机数`y`和`x+1`
  客户端 ->> 服务端 : ACK `y+1`
    Note right of 客户端: 客户端发送`y+1`
  客户端 -->> 服务端 : 开始发送数据

http是基于TCP/IP的应用层通信协议,用于定义客户端和服务器之间的通信规则。

http/0.9(1991)

http第一个有记录的版本是1991年提出的http/0.9,他是有史以来简单的协议。

GET /index.html

服务器可能返回以下信息

(res body)
(connection closed)

http/1.0(1996)

Warning

http/1.0的主要缺点之一就是每个连接不能有多个请求。对于任何一个请求,都必须建立在新的连接上,会因为三次握手导致性能浪费。

GET /index.html HTTP/1.0
Host: jinzhe.cc
Accept: */*

服务器可能返回以下信息

HTTP/1.0 200 OK
Content-Type: text/plain
Server: Apache 0.84

(res body)
(connection closed)

http/1.1(1999)

Warning

Content-Length并不能完全解决持久连接的问题,假如说数据是动态的,并且服务端无法知道内容长度,那么客户端就无法知道数据何时结束。
队头阻塞

SPDY(2009)

SPDY的出现并不是取代HTTP,而是在HTTP发出请求之前对其修改。它开始成为事实上的标准,大多数浏览器开始实现它。到了2015年,Google不想出现两个相互竞争的标准,
所以它决定将SPDY合并到HTTP/2.0中并弃用SPDY。

http/2.0(2015)

HTTP/2 专为低延迟内容传输而设计,

三次握手

sequenceDiagram
  客户端 ->> 服务端: SYN `x = random()`
    Note right of 客户端: 客户端发送随机数`x`
  服务端 ->> 客户端 : SYN+ACK `y = random()`;`x+1`
    Note left of 服务端: 服务端返回随机数`y`和`x+1`
  客户端 ->> 服务端 : ACK `y+1`
    Note right of 客户端: 客户端发送`y+1`
  客户端 -->> 服务端 : 开始发送数据
❤️ 转载文章请注明出处,谢谢!❤️