分类 HTTP 下的文章

Keep-Alive 模式

在 Content-Length 和 Transfer Encoding 之前,先要理解 Keep-Alive 模式,这就要提到http1.0协议的缺点。

http1.0协议的主要缺点就是,每个TCP连接只能发一个请求, 每次数据发送完毕,连接就关闭。 如果还要请求其他资源,就必须新建连接。

因为三次握手、慢启动等,TCP连接新建的成本很高。 随着web的发展,需要请求的资源越来越多,这个问题就越来越突出。

在http1.0时代,为了解决这个问题, 有些浏览器在请求时会在请求头里加上一个自定义字段:

Connection: keep-alive

这个字段就是告诉服务器不要关闭TCP连接,以便其他请求复用,但是,这还不是标准字段。

1997年1月, http1.1版本发布,引入了持久连接,即默认情况下TCP连接不关闭,可以被复用,也就是默认 keep-alive 。同时,支持通过 Connection:close 来通知关闭TCP连接。

所以实际上,http1.0协议下客户端和服务端可以通过 Connection: keep-alive 告知对方发送完数据后不要关闭TCP连接,而http1.1协议下默认就是 Connection: keep-alive 持久连接。

示例:

- 阅读剩余部分 -