为了解决HTTP传输延迟问题,HTTP1.1使用了持久化连接,持久化连接中,TCP连接默认都是激活的,在数据传输结束时,发送报文首部为Connection:close的报文。但客户端和服务器都可以随时结束TCP连接,不是必须发送首部为Connection:close的报文。
进行持续连接时,不是客户端与服务器进行持久连接,而是客户端与服务器分别与两者中间的代理进行持久连接,持久连接的首部Connection经过一级跳转之后就会被过滤掉。
一个客户端最多只能对两个服务器或代理发起持续连接
假如客户端有十一个请求要发送,前十个请求发送过去之后,会放在服务器的缓存区,而这时关闭连接的话,最后一个请求无法发送过来,就会清空缓存区的请求,十一个请求从新发送(因为TCP是可靠连接)
管道化连接。HTTP1.1允许在持续连接上可选的使用请求管道。就是在响应到达之前,把请求放在一个队列里,当上一个请求到达服务器时,这个请求开始发送
管道化连接的限制:
1、必须是在持续化连接中使用
2、客户端必须做好连接会随时中断的准备,随时准备重新发送请求
3、响应顺序必须与请求顺序一致
4、管道化连接中不能使用POST请求
关闭分为两种,一种是完全关闭,一种是半关闭,套接字调用close会完全关闭,调用shutdown会办关闭。
TCP两端都会各有一个输出与输入队列
完全关闭会将输入与输出都关闭,而半关闭可以单独关闭输出或输入,使用半关闭可以更好的避免一些错误,只关闭服务器端的输出信道是十分安全的,如果服务器的输入信道被关闭的话,客户端的请求没有全部发送完,会使已被发送且已经缓存的请求被清空。