HTTP 的前世今生
HTTP 的起源
HTTP(HyperText Transfer Protocol)是万维网(World Wide Web)的基础协议。起源于 CERN 实验室的 Tim Berners-Lee 博士的一篇论文。该论文是关于建立一个通过网络传输超文本的系统。提出了三大关键技术:
URL:统一资源标识符
HTML:超文本标记语言
HTTP:超文本传输协议
该论文的发表标记着 HTTP 的诞生!
HTTP 协议介绍
HTTP 超文本传输协议(HyperText Transfer Protocol)是当今互联网上应用最为广泛的一种网络协议。HTTP 协议规定,在两台计算机之间使用 HTTP 协议进行通信时,在一条通信线路上必定有一端是客户端,另一端则是服务端。当在浏览器中输入网址访问某个网站时, 你的浏览器(客户端)会将你的请求封装成一个 HTTP 请求发送给服务器站点,服务器接收到请求后会组织响应数据封装成一个 HTTP 响应返回给浏览器。
HTTP 版本发展
HTTP/0.9
最早版本是 1991 年发布的 0.9 版。该版本极其简单,只有一个命令 GET。响应也极其简单的:只包含响应文档本身。不包含响应头,无法根据状态码进行区分。
HTTP/1.0
由于互联网的快速发展,HTTP/0.9 大大受限。所以 1996 年,HTTP/1.0 正式发布。
发布内容:
任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。真正实现了超文本传输。
除了 GET 命令,还引入了 POST 命令和 HEAD 命令,丰富了浏览器与服务器的互动手段。
引入协议版本号的概念
HTTP 请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。
增加了状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等。
但,真正使用的时候,发现 HTTP/1.0 存在比较严重的问题:
HTTP/1.0 版的主要缺点是,每个 TCP 连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。
TCP 连接的新建成本很高,因为需要客户端和服务器三次握手,并且开始时发送速率较慢。
HTTP/1.1
在半年后,为进一步完善 HTTP 协议,HTTP/1.1 版本发布。
相对于 HTTP/1.0 版本 HTTP/1.1 做了一些优化大致如下:
HTTP 1.1 支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟,在 HTTP1.1 中默认开启 Connection: keep-alive,一定程度上弥补了 HTTP1.0 每次请求都要创建连接的缺点。
增加了 PUT、DELETE 、OPTION 等新的方法
引入额外的缓存控制机制:引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
允许响应数据分块(chunked),利于传输大文件
增加管道机制:在同一个 TCP 连接里面,客户端可以同时发送多个请求。这样就进一步改进了 HTTP 协议的效率。
HTTP/2
在 Google 的 SPDY 协议的基础上,HTTP/2 诞生。
主要特点:
二进制分帧:HTTP/2 的所有帧都采用二进制编码:HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。
多路复用 (Multiplexing):允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息
请求优先级:将 HTTP 消息分解成多个不同优先级的请求流,优先响应高优先级的请求。
header 压缩:客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,不再重复发送 header
服务端推送:服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确地请求,服务端可以提前给客户端推送必要的资源,这样可以减少请求延迟时间。
HTTP/3
未来可期
版权声明: 本文为 InfoQ 作者【技术小生】的原创文章。
原文链接:【http://xie.infoq.cn/article/0e2383bfd7243584da3b766b2】。文章转载请联系作者。
评论