http连接流程
http连接流程分为三步:
- 客户端与服务器创建TCP连接
- 客服端发送http请求,服务器处理并返回响应
- 关闭TCP连接
整体流程如下图:
http可能的性能问题
- DNS域名解析。客户端建立TCP请求前需要根据URL获取到对应的ip和端口。如果最近没有访问该域名可能会花费比较长的时间进行域名和ip的转换。
- TCP连接建立和关闭。TCP连接建立关闭会交换一系列的IP分组,对连接的有关参数进行沟通。大量传输很少数据量,网络的性能会很低。
- TCP慢启动。TCP连接在刚建立时会限制连接传输的最大速度,随着第一个报文的传输成功,TCP会慢慢提高传输速度。这种调节称为TCP的慢启动。
http连接管理
并行连接
一个页面也引用了100个css或者js,浏览器如果一个一个的去加载,那就太慢了。http允许浏览器打开多个连接,并发的进行http请求。当然并行连接不能一定提高访问的效率。比如说TCP慢启动导致新创建的连接效率都比较低,或者并行连接的打开数量可能也会受到限制。
持久连接
浏览器经常打开来自同一网站的页面,因此在不久的将来可能会继续打开这一网站的页面。http允许浏览器在事物处理结束后,连接保持打开状态,以便未来的请求重用现存的连接。这种事物处理结束后仍然处于打开状态称为持久连接。http1.0通过首部connection:keep-alive,http1.1通过首部connection:persistent,通知服务器客服端想打开一个持久连接
管道化连接
管道化连接是http1.1对持久连接的一个优化。在响应到达服务器之前,按照一定的顺序继续发送请求队列中的其他请求。管道化连接必须是持久连接,请求和响应都是有序的。如果发送了多条请求服务器只处理了部分请求,客户端必须能够重发没有处理的请求。