本章主要讲一下几点:
- HTTP是如何使用TCP连接的;
- TCP连接的时延、瓶颈以及存在的障碍;
- HTTP的优化,包括并行连接、keep-alive(持久连接)和管道化连接;
- 管理连接时应该以及不应该做的事情。
TCP连接
TCP为HTTP提供了一条可靠的比特传输管道。
TCP连接是通过4个值来识别的:
<源IP地址、源端口号、目标IP地址、目标端口号>
TCP套接字编程 --- 相见linux相关书籍
TCP慢启动,TCP连接会随时间进行自我“调谐”,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。用于防止因特网的突然过载和拥塞。
更多关于tcp连接相关的内容,请查看TCP/IP卷。
并行连接
HTTP允许客户端打开多条连接,并行地执行多个HTTP事务。
持久连接
HTTP/1.1允许HTTP设备在事务处理结束之后将TCP连接保持在打开状态,以便未来的HTTP请求重用现存的连接。在事务处理结束之后仍然保持在打开状态的TCP连接被称为持久连接。
持久连接有两种类型:
1.比较老的HTTP/1.0+ "keep-alive"连接;
2.HTTP/1.1 "persistent"连接。
Keep-Alive操作
主要通过 Connection: Keep-Alive的首部来实现。
注意,keep-alive首部只是请求将连接保持在活跃状态。发出keep-alive请求之后,客户端和服务器并不一定会同意进行keep-alive回话。它们可以在任意时刻关闭空闲的keep-alive连接,并可随意限制keep-alive连接所处理事务的数量。keep-alive可以带一些选项,如max为希望多少个事务保持此状态,timeout为希望保持活跃状态时间。
例:
Connection: Keep-Alive
Keep-Alive: max=5, timeout=120
HTTP/1.1持久连接
与HTTP/1.0不同,HTTP/1.1持久连接在默认情况下是激活的,除非特别指明,否则所有连接都是持久化的。要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显式地添加一个Connection: close首部。
管道化连接
在响应到达之前,可以将多条请求放入队列中。