HTTP的前世今生

走过路过,不要错过这个公众号哦!

《HTTP的前世今生》

我们打开网页,在址址栏键入网址,直到获取资源, 这一切都是构建在HTTP协议上进行通信的,所以说HTTP是前端开发人员必须掌握的基础中的基础一点不为过。下面请跟前笔者一起漫步的方式一起走过HTTP发展的那些往事,让我们站在历史的高度上回顾和展望。

HTTP(HyperText Transfer Protocol),名为超文本传输协议。之所以叫超文本,是源于当时Tim Beners-Lee博士共享知识的设想,最初的理念是希望通过多文档的互联继而形成超文本,连接可相互参阅的WWW(万维网)。

最初的构想

HTTP其实在1990年就已经有雏形了。被称为HTTP/0.9, 也就是1.0之前版本。标准当时定义得非常简单,就是请求-应答。当时的响应报文也只有一个响应体构成。这就意味着不可以构造特殊的数据类型(Content-type),所以响应包只是简单的以与服务器的TCP连接的断开为结束。

《HTTP的前世今生》

请求-应答式

标准确立:失忆症的巨人

HTTP/0.9 并没有被服务器广泛使用,直到1996年5月HTTP/1.0标准公布。直到现在,若有人提到老标准HTTP,指的就是HTTP1.0。HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。也就是说吧,服务器端不对请求和响应的通信状态进行保存。一句话,HTTP是无状态的(stateless)

《HTTP的前世今生》

http/1.0有两个很大的缺点:

连接无法复用 (TCP通道立即关闭)

队首请求阻塞 (http、tcp)

http应用层队首阻塞:http1协议规定严格按照优先级进行请求发送,意味着低优先级请求的发送必须等待高优先级响应后进行。

tcp传输层队首阻塞:tcp要求分组严格按照顺序交付,一个分组未收到,就会阻塞后续的所有高序号分组。直到重传那个丢失的分组。

如果说只是传输文本,这样做其实没多大问题。随着Web的发展,文档中包含大量的图片,多次TCP通道的建立和断开,增加大量冗余的通讯开销。

流水线化

1997年1月,HTTP/1.1版本发布。可以看出从1.0发展到1.1这个过程是非常快的。

HTTP/1.1解决了老版本中的两个痛点。

1 通过持久连接(keep-alive)的方式,使流水线(pipelining)通讯作业成为可能。有的文章中称其为管线化,但笔者更喜欢流水线这个词,形象生动的解释了HTTP/1.1的工作原理。

2 支持多个请求同时发送,互不影响。

在HTTP/1.1中keep-alive是默认开启的。但也可在服务器端将其关闭。

《HTTP的前世今生》

SPDY 多路复用的尝试

虽然在HTTP/1.1中已经支持流水线化,但是随着时代的发展,其功能使用上的疲态已经凸显。

1 一条连接上只能发一个请求

2 请求只能从客户端开始

3 请求/响应首部未经压缩

4 发送冗长的首部

5 可任意选择数据压缩

这些问题,是HTTP协议本身的限制。为了解决它们,必须进行一些协议层面上的改动。

SPDY并没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作。

《HTTP的前世今生》

引入了SPDY,HTTP协议得以实现:

1 多路复用

通过单一的TCP连接,可以无限制处理多个HTTP请求。

2 赋予请求优先级

3 压缩HTTP首部

4 推送功能

5 服务器提示功能

SPDY消除了Web瓶颈了吗?

因为SPDY基本上只是将单个域名的通信多路复用,所以当一个Web网站上使用多个域名下的资源,改善效果就会受限。

不少人做过实验,结论是:SPDY没有给页面加载提升多少,不能抵消从SSL切换的成本。

HTTP/2.0的到来

可以说HTTP的发展是相当缓慢的。HTTP/2.0在2015年2月正式发布。并对SPDY协议进行了更新。

与SPDY相比,有重要的两点改进

1 HTTP/2 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS


2 HTTP/2 消息头的压缩算法采用 HPACK ,而非 SPDY 采用的 DELEFT

HTTP/2 的改变:

1 HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。

2 HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。

3 多路复用,直白的说就是所有的请求都是通过一个 TCP 连接并发完成。HTTP/1.x 虽然能利用一个连接完成多次请求,但是多个请求之间是有先后顺序的,后面发送的请求必须等待上一个请求返回才能发送响应。这会很容易导致后面的请求被阻塞,而 HTTP/2 做到了真正的并发请求。同时, 流还支持优先级和流量控制。

4 Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。

相关链接:

HTTP/2推送技术之难,真的远超我们想象

HTTP/2的应用实战:每天400gb图片

~求关注

《HTTP的前世今生》
《HTTP的前世今生》

全心全意为人民服务

长按扫码即可关注

    原文作者:HTTP
    原文地址: https://juejin.im/entry/5966e16c6fb9a06bb8749706
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞