HTTP1.0 Vs HTTP1.1 Vs HTTP2.0

http1.0与http1.1的区别
主要区别主要体现在:

缓存处理

在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

带宽优化及网络连接的使用

HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

错误通知的管理

在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

Host头处理

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

长连接

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

分块编码
这里我们先了解一下什么是分块编码。

简单来说分块编码就是把数据拆分成一个个的数据块。

然而,为什么会有这种情况呢?

通常情况下,http响应消息以message body的形式作为整包发送给客户端的,用content-length表示消息体的长度,这个长度对于客户端来说非常重要,因为持久连接不会马上结束,而是可以发送多次请求/响应,客户端需要知道哪个位置才是响应消息的结束,以及后续响应的开始,因此这个content-length就显得尤为重要,服务端必须精确地告诉客户端这个值,如果content-length比实际长度短,就会出现截断,如果比实际长度长,就可能出现一直处于pending状态
在这种情况下,在复杂页面中可能就会出现这样的情况,如果是要把消息完全创建好之后再计算出其content-length,这时候客户端就会有一段等待时间,页面越复杂数据越复杂计算时间越长,可能用户就会受不了。
分块传输编码就是针对这个情况作出的一种解决方案。它将数据分解成一系列数据块,并以多个块发送给客户端,服务器发送数据时不再需要预先告诉客户端发送内容的总大小,只需在响应头里添加Transfer-Encoding:chunk就可以不用告诉客户端发送内容的长度了

HTTP2.0

http2.0的主要目的是改进传输性能,实现低延迟和高吞吐量。

为什么会需要http2.0?

在http1.1中出现了很多优化措施,但是,当我们想要进行这些措施时,就会发现,其实其中包含了很多限制。HTTP1.x只能串行地返回响应,他不允许一个连接上的多个响应数据交错到达(多路复用),因而一个响应必须完全响应返回之后,下一个响应才回开始传输。
而http2.0就是通过支持请求与响应的多路复用来减少延迟,通过压缩HTTP首部字段来将协议开销降至最低,同时增加对请求优先级和服务器推送的支持

http2.0的实现

二进制分帧层

HTTP 2.0 性能增强的核心,全在于新增的二进制分帧层(图 12-1),它定义了如何
封装 HTTP 消息并在客户端与服务器之间传输。

image.png

在http1.x中,如果客户端想发送多个并行的请求以改进性能,那么必须使用多个tcp连接,该模型会保证每次连接只交付一个响应,更糟糕的是,这种情况下也会造成队首阻塞,从而造成底层tcp连接的效率低下。
http2.0中新的二进制分层突破了这种限制,实现了多向请求和响应,客户端和服务器可以把http消息分解为互不依赖的帧,然后乱序发送,最后再另一端然后再根据每个帧首部的流标识符重新组装

首部压缩

http的每次通信会携带一组首部,用于描述传输额资源及其属性。在http1.x中,这些元数据以文本的形式发送,通常会给每个请求增加500-800字节的负荷。如果算上cookie,可能就会出现上千字节的负荷。为减少开销并提升性能,http2.0会压缩首部元数据

  • http2.0在客户端和服务端通过“首部表”跟踪和存储之前发送的键值对,对于相同的键值对,不再每次请求和响应发送
  • 首部表在http2.0的连续存储期内始终存在,由客户端和服务器共同渐进地更新
  • 每个新的首部键值对要么被追加到当前表的末尾,要么替换表中的值
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容