1:HTTP与TCP协议的区别
纠正一下一直误解的概念:以为HTTP和TCP是两种不同的,但是地位对等的协议,虽然知道TCP是传输层,而HTTP是应用层
实际上 HTTP是要基于TCP连接的基础上的
TCP就是单纯的建立连接以及数据传输协议 不涉及任何我们需要请求的实际数据。
HTTP是需要用来收发数据的,即是实际应用上。
从传输层,先说TCP连接,我们要和服务端连接TCP连接,需要通过三次连接,包括:请求,确认,建立连接。即传说中的“三次握手协议”。
一次HTPP请求在底层发送了什么:
在前面客户端和应用服务器建立TCP连接之后,就需要用http协议来传送数据了:
第一:客户端Client发送一个http请求给服务端Sever,这个请求包括请求头和请求内容;
第二:服务端Sever收到了http请求,然后根据http请求,返回http响应到客户端Client;
第三:客户端Client收到了以后,就由浏览器完成一系列的渲染,包括执行JS脚本等。
TCP是底层通讯协议,定义的是连接方式 和 数据传输 的规范。
HTTP是应用层协议,定义的是传输数据的内容的规范。
TCP/IP是网络中使用的基本的通信协议,是Internet国际互联网络的基础
HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP。
TCP/IP实际上是一组协议,它包括上百个各种功能的协议(了解)
如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。
通常说TCP/IP是Internet协议家族,而不单单是TCP和IP。
2:是不是一次HTTP请求 就要建立一次TCP连接
非持久连接:HTTP/1.0 中 的首部字段Connection 默认值为 close,
即每次请求都会重新建立和断开 TCP 连接.
持久连接:HTTP/1.1 中 的首部字段Connection 默认值为 keep-alive ,
连接可以复用,只要发送端、接收端都没有提出断开连接,则保持tcp连接状态。
管线化(pipelining)(HTTP 1.1)(BIO)
管线化技术的出现,实现了同时发送多个http请求,不必等待上一请求返回响应,但是浏览器默认关闭管线化,原因如下:
1:一些代理服务器不能正确的处理 HTTP Pipelining
2:Head-of-line Blocking 连接头阻塞:
在建立起一个 TCP 连接之后,假设客户端在这个连接连续向服务器发送了多个请求。
如果按照标准的话,服务器应该按照收到请求的顺序返回结果,假设服务器在处理首个请求时花费了大量时间,
那么后面所有的请求都需要等着首个请求结束才能响应,造成了阻塞。
因为http1.1中的管线化实际上无法使用,因此在http2.0中出现了Multiplexing 多路传输特性
多路复用(Multiplexing)(HTTP 2.0)(NIO)
在 HTTP 2.0 中,有两个非常重要的概念,分别是帧(frame)和流(stream),
帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。
多路复用,就是在一个 TCP 连接中可以存在多条流。
换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。
通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。
网友评论