HTTP
超文本传输协议是一个用于传输超文本文档的应用层协议,它是为Web
浏览器与Web
服务器之间的通信而设计的,HTTP
协议到目前为止全部的版本可以分为HTTP 0.9
、HTTP 1.0
、HTTP 1.1
、HTTP 2.0
、HTTP 3.0
,其中现在普遍应用的版本是HTTP 1.1
版本,正在推进HTTP 2.0
版本,以及未来的HTTP 3.0
版本。
HTTP 0.9
也被称为单行协议,最初版本的HTTP
协议并没有版本号,后来它的版本号被定位在0.9
以区分后来的版本,HTTP 0.9
极其简单,请求由单行指令构成,以唯一可用方法GET
开头,其后跟目标资源的路径。HTTP 0.9
的响应内容并不包含HTTP
头,这意味着只有HTML
文件可以传送,无法传输其他类型的文件,也没有状态码或错误代码,出现异常时一个特殊的包含问题描述信息的HTML
文件将被响应返回。
HTTP
请求头和请求体。HTTP 1.0
构建了可扩展性,为了满足传输多种类型文件的需求,为了让客户端和服务器能更深入地交流,HTTP 1.0
引入了请求头和响应头,它们都是以为Key-Value
形式保存的,在HTTP
发送请求时,会带上请求头信息,服务器返回数据时,会先返回响应头信息。
HTTP 1.0
被追加到了GET
行。HTTP
请求头告诉服务器它期待服务器返回什么类型的文件、采取什么形式的压缩、提供什么语言的文件以及文件的具体编码。If-Modified-Since
、Expires
等控制更新或使用本地缓存。Content-Type
头,使HTTP
具备了传输除纯文本HTML
文件以外其他类型文档的能力。HTTP 1.1
是标准化的协议,HTTP 1.1
消除了大量歧义内容并引入了多项改进。
HTTP 1.1
引入了更多的缓存控制策略,例如Entity tag
、If-Unmodified-Since
、If-Match
、If-None-Match
等更多可供选择的缓存头来控制缓存策略。range
,它允许只请求资源的某一个部分,即返回206
状态码,这样方便了开发者自由选择以便充分利用带宽和链接,并且可以使用Range
和Content-Range
制作断点续传功能。HTTP 1.1
中新增了24
个错误状态码。Host
请求头,能够使不同域名配置在同一个IP
地址的服务器上。HTTP 1.1
支持长连接,在一个TCP
连接上可以传输多个HTTP
请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP 1.1
中默认开启Connection:keep-alive
,一般浏览器对于同一个域名允许同时建立6
个长链接。Transfer-Encoding: chunked
进行分块响应,允许响应的数据可以分成多个部分,配合服务端尽早释放缓冲可以获得更快的响应速度。HTTP 2.0
拥有更优异的表现,现网页愈渐变得的复杂,甚至演变成了独有的应用,媒体的播放量,增进交互的脚本大小也增加了许多,更多的数据通过HTTP
请求被传输,由此HTTP 2.0
为网络效率做了大量的优化。
HTTP 2.0
是二进制协议而不是文本协议,将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。TCP
连接中走,HTTP
消息被分解为独立的帧,服务端根据标识符和首部将消息重新组装起来,移除了HTTP 1.1
中顺序和阻塞的约束。header
,header
在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。HTTP 3.0
目前处于制订和测试阶段,是未来的全新的HTTP
协议,HTTP 3.0
协议运行在QUIC
协议之上,是在UDP
的基础上实现了可靠传输,权衡传输速度与传输可靠性并加以优化,使用UDP
将避免TCP
的队头阻塞问题,并加快网络传输速度,但同样需要实现可靠传输的机制,HTTP 3.0
不是HTTP 2.0
的拓展,HTTP 3.0
将会是一个全新的协议。