- HTTP协议的使用一般基于TCP协议
- HTTP协议处于OSI七层协议中的应用层,TCP解决的是传输层的逻辑,提供传输控制,按顺序组织数据,和错误纠正
- HTTP协议的瓶颈及其优化技巧都是基于TCP协议本身的特性
HTTP1.0-一个TCP连接只能传送一个HTTP请求
- HTTP 1.0规定浏览器与服务器只保持短暂的连接
- 浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求
- 早期的网页只有大段的文字,用1.0没问题。但目前的网页打开之后,需要加载大量的图片,css,js等,需要发送多次请求。
HTTP1.1
- 在一个TCP连接上可以传送多个HTTP请求和响应(只能串行发送,但不能并行发送),减少了建立和关闭连接的消耗和延迟
- 允许客户端不用等待上一次请求结果返回,就可以发出下一次请求。但服务器端必须啊按照接收到客户端请求的先后顺序,依次回送响应结果,以保证客户端能够区分出每次请求的响应的内容。
- 这意味着,先接收到的请求的响应也要先发送。这样造成的问题是,如果最先收到的请求处理时间长的话,响应生成也慢,就会阻塞已经生成了的响应的发送,造成队首阻塞。
大部分的浏览器还是使用的HTTP1.0和HTTP1.1的版本
HTTP2.0-不再是以HTTP报文为单位,而是以二进制分帧为单位。
- 最关键的是支持了多路复用,HTTP1.1如果客户端想要发送多个并行的请求,那么必须使用多个TCP连接
- HTTP2.0中,采用二进制分帧机制,帧是最小的数据单位,客户端和服务器把HTTP消息分解为互不依赖的帧,然后乱序发送,然后在接收端重新组装,这样就完成了消息的传输
- 在一个TCP连接中存在多个流,可以同时发送多个请求
- 在发送端这些帧乱序发送,在接收端并行交错地发送响应,响应之间互不干扰。通过该技术,避免了HTTP1.1的队首阻塞问题,极大提高传输性能。