Content-Length 和 Transfer Encoding Chunked
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 持久连接。
示例: