http协议概述:
超文本传输协议HyperText Transport Protocol,定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP 协议工作于客户端-服务端架构上,默认端口号为 80。基于 TCP/IP 通信协议来传递数据。发展历程:HTTP 0.9、HTTP 1.0、HTTP 1.1(最广泛)、HTTP2、HTTP3
![](https://i-blog.csdnimg.cn/blog_migrate/9dafc9cddf3889f5f2a788547ce7455f.png)
http协议特点:
无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
无状态:无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。
媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。
http 0.9简介:
于 1991 年提出的,主要用于学术交流,需求很简单——用来在网络之间传递 HTML 超文本的内容,所以被称为超文本传输协议。
特点:
(1)只有一个请求行,并没有 HTTP 请求头和请求体,因为只需要一个请求行就可以完整表达客户端的需求了。
(2)服务器没有返回头信息,这是因为服务器端并不需要告诉客户端太多信息,只需要返回数据就可以了。
(3)返回的文件内容是 ASCII 字符流来传输的,因为都是 HTML 格式的文件,所以使用 ASCII 字节码来传输是最合适的。
http 1.0简介:
相比于0.9版本就引入了请求头和响应头,支持多种类型文件下载。
有的请求服务器可能无法处理,或者处理出错,这时候就需要告诉浏览器服务器最终处理该请求的情况,这就引入了状态码。状态码是通过响应行的方式来通知浏览器的。
为了减轻服务器的压力,在 HTTP/1.0 中提供了 Cache 机制,用来缓存已经下载过的数据。
服务器需要统计客户端的基础信息,比如 Windows 和 macOS 的用户数量分别是多少,所以 HTTP/1.0 的请求头中还加入了用户代理的字段。
![](https://i-blog.csdnimg.cn/blog_migrate/d520643f9a5853bb7f857f5641240f6a.png)
http 1.1简介:
增加了持久连接方法来提升连接效率。
引入了客户端 Cookie 机制和安全机制。
引入了对虚拟主机的支持、对动态内容的支持。
协议扩展切换:HTTP1.1协议支持在请求头部域消息中包含Upgrade头,并让客户端通过头部标识令服务器知道它能够支持其他备用通信协议的一种机制。
![](https://i-blog.csdnimg.cn/blog_migrate/0e90c596b718db35d969a73489532fcd.png)
http 2.0简介:
多路复用是 HTTP/2 的最核心功能,它能实现资源的并行传输。
可以设置请求的优先级。
可以直接将数据提前推送到浏览器。
对请求头和响应头进行了压缩,减小消息体积。
2018 年开始得到了大规模的应用。
http轮询:
早期的很多网站为具备数据推送能力,所在用的技术基本都是HTTP轮询。
轮询是由由客户端每隔一段时间(如每隔5s)向服务器发出HTTP请求,服务端接收到请求后向客户端返回最新的数据。
客户端的轮询方式一般为短轮询Poll或长轮询Long Poll。
Poll:一般是由客户端每隔一段时间(如每隔5s)向服务器发起一次普通HTTP请求。服务端查询当前接口是否有数据更新,若有数据更新则向客户端返回最新数据,若无则提示客户端无数据更新。
Long Poll:一般是由客户端向服务端发出一个设置较长网络超时时间的HTTP请求,并在Http连接超时前,不主动断开连接;待客户端超时或有数据返回后,再次建立一个同样的Http请求,重复以上过程。
轮询的缺点
首先,客户端需要不断的向服务器发出请求,在消耗较多客户端资源的情况下,服务端并不一定有新的数据下发;
其次,HTTP协议请求与回复消息中,需包含较长的头部信息,其中真正有效的数据有可能只占较小的一部分,带来较多的带宽资源消耗。
另外,若服务端在同一时间存在连续频繁的数据变化(例如:聊天室场景中),客户端获知数据更新相对较慢(可能存在时间的滞后性)无法保证客户端的用户体验。