透视HTTP协议
罗剑锋(Chrono)
奇虎360技术专家,Nginx/OpenResty开源项目贡献者
立即订阅
6077 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|To Be a HTTP Hero
免费
破冰篇 (7讲)
01 | 时势与英雄:HTTP的前世今生
02 | HTTP是什么?HTTP又不是什么?
03 | HTTP世界全览(上):与HTTP相关的各种概念
04 | HTTP世界全览(下):与HTTP相关的各种协议
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
06 | 域名里有哪些门道?
07 | 自己动手,搭建HTTP实验环境
基础篇 (7讲)
08 | 键入网址再按下回车,后面究竟发生了什么?
09 | HTTP报文是什么样子的?
10 | 应该如何理解请求方法?
11 | 你能写出正确的网址吗?
12 | 响应状态码该怎么用?
13 | HTTP有哪些特点?
14 | HTTP有哪些优点?又有哪些缺点?
进阶篇 (8讲)
15 | 海纳百川:HTTP的实体数据
16 | 把大象装进冰箱:HTTP传输大文件的方法
17 | 排队也要讲效率:HTTP的连接管理
18 | 四通八达:HTTP的重定向和跳转
19 | 让我知道你是谁:HTTP的Cookie机制
20 | 生鲜速递:HTTP的缓存控制
21 | 良心中间商:HTTP的代理服务
22 | 冷链周转:HTTP的缓存代理
安全篇 (7讲)
23 | HTTPS是什么?SSL/TLS又是什么?
24 | 固若金汤的根本(上):对称加密与非对称加密
25 | 固若金汤的根本(下):数字签名与证书
26 | 信任始于握手:TLS1.2连接过程解析
27 | 更好更快的握手:TLS1.3特性解析
28 | 连接太慢该怎么办:HTTPS的优化
29 | 我应该迁移到HTTPS吗?
飞翔篇 (4讲)
30 | 时代之风(上):HTTP/2特性概览
31 | 时代之风(下):HTTP/2内核剖析
32 | 未来之路:HTTP/3展望
33 | 我应该迁移到HTTP/2吗?
探索篇 (5讲)
34 | Nginx:高性能的Web服务器
35 | OpenResty:更灵活的Web服务器
36 | WAF:保护我们的网络服务
37 | CDN:加速我们的网络服务
38 | WebSocket:沙盒里的TCP
总结篇 (2讲)
39 | HTTP性能优化面面观(上)
40 | HTTP性能优化面面观(下)
答疑篇 (2讲)
41 | Linux/Mac实验环境搭建与URI查询参数
42 | DHE/ECDHE算法的原理
结束语 (1讲)
结束语 | 做兴趣使然的Hero
透视HTTP协议
登录|注册

30 | 时代之风(上):HTTP/2特性概览

Chrono 2019-08-05
第 14 讲里,我们看到 HTTP 有两个主要的缺点:安全不足和性能不高。
刚结束的“安全篇”里的 HTTPS,通过引入 SSL/TLS 在安全上达到了“极致”,但在性能提升方面却是乏善可陈,只优化了握手加密的环节,对于整体的数据传输没有提出更好的改进方案,还只能依赖于“长连接”这种“落后”的技术(参见第 17 讲)。
所以,在 HTTPS 逐渐成熟之后,HTTP 就向着性能方面开始“发力”,走出了另一条进化的道路。
第 1 讲的 HTTP 历史中你也看到了,“秦失其鹿,天下共逐之”,Google 率先发明了 SPDY 协议,并应用于自家的浏览器 Chrome,打响了 HTTP 性能优化的“第一枪”。
随后互联网标准化组织 IETF 以 SPDY 为基础,综合其他多方的意见,终于推出了 HTTP/1 的继任者,也就是今天的主角“HTTP/2”,在性能方面有了一个大的飞跃。

为什么不是 HTTP/2.0

你一定很想知道,为什么 HTTP/2 不像之前的“1.0”“1.1”那样叫“2.0”呢?
这个也是很多初次接触 HTTP/2 的人问的最多的一个问题,对此 HTTP/2 工作组特别给出了解释。
他们认为以前的“1.0”“1.1”造成了很多的混乱和误解,让人在实际的使用中难以区分差异,所以就决定 HTTP 协议不再使用小版本号(minor version),只使用大版本号(major version),从今往后 HTTP 协议不会出现 HTTP/2.0、2.1,只会有“HTTP/2”“HTTP/3”……
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《透视HTTP协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(11)

  • magicnum
    h2c优点是性能,不需要TLS握手以及加解密。可以通过curl工具构造h2c请求;
    h2的流是虚拟的因为它是使用帧传输数据的,相同streamid的帧组成了虚拟消息以及流;
    相同点:都是基于tcp或TLS,并且是基于请求-响应模型,schema还是http或https不会有http2。
    不同点:h2使用二进制传输消息并且通过HPACK压缩请求头,实现流多路复用、服务器推送

    作者回复: great!

    2019-08-05
    5
  • -W.LI-
    课后习题出的很好。可惜我不会坐等答案
    1.内网用h2c会比https快么?
    2.感觉回答虚拟流之前给先回答啥是真真的流。我对流的理解是有序,切只能读一次。http2支持乱序发,我猜也支持,部分帧重发,所以就是虚拟的了。
    3.共同,都是应用层协议,传输成都用的TCP。
    不同:https=TLS+HTTP/HTTP2,安全。
    http2:二进制传输,对header压缩,通过二进制分帧解决了队头阻塞,传输效率更高,服务端可推数据
    http:明文,队头阻塞,半双工。
    问题1:一个TCP链接可以打开很多channel是吧,每一个channel都可以传输数据。底层具体怎么实现的啊,是怎么区分channel里的数据谁是谁的?
    问题2:我之前看见TPC好像是通过服务端IP,服务端端口号,客户端端IP,客户端端口号。来唯一标识一个链接的。http1的时候队头阻塞,继续要多建http链接。每建立一个链接客户端就用一个不同的端口号么?

    作者回复:
    1.当然,省去了加密的成本。

    2.所谓“虚拟的流”,是指流实际上是多个同一序号的帧,并没有真正的流数据结构,这与连接不同。

    3.正确。

    4.你说的channel应该是http/2里的“流”吧,http/2里没有channel。流是由帧组成的,帧头里有流id标记所属的流,马上会讲具体的细节。

    5.标记一个tcp连接要用四元组(客户端ip端口+服务器ip端口),所以肯定要用一个新的端口号,在客户端这是临时分配的,而服务器是固定的端口。

    2019-08-05
    2
    3
  • 阿锋
    突然想起了一个问题,get和post请求其中一个区别是,post请求会把请求的数据放入请求体(body)中,而get请求是拼接到url后面。get请求是不是一定不能往请求体(body)中放入数据。还是这些都只是客户端和服务端的约定,可以灵活的自定义,没有强制的要求。

    作者回复: get也可以有body,post也可以用query参数,区别的关键在于动作语义,一个是取一个是存。

    2019-08-05
    1
    2
  • nb Ack
    老师好。我想问一下,http2的多路复用和http的长连接效果不是一样吗?

    作者回复: 完全不一样。

    多路复用多个请求没有顺序,而长连接多个请求必须排队,就会队头阻塞。

    可以再看看示意图体会一下。

    2019-08-05
    2
  • 夏目
    流就是逻辑上将数据帧按id分组了,同组有序,组间无序,本质就是id相同的几个数据帧所以流是虚拟的。在tcp层面还是队首阻塞的吧?需要等待ack

    作者回复: 是的,理解的非常正确。

    2019-12-09
  • Geek_007
    老师,新版nginx已经支持同端口,不同域名根据配置开启h2了。另外h2不支持CBC吗?CBC只是加解密效率低,没有安全性问题吧,况且的确CBC还是很常见的加密模式呢。

    作者回复:
    1.我测试是不行的,也许新的有变化,有空再试试。

    2.cbc不安全,http/2已经禁用了,可以参考rfc。

    2019-10-13
  • 谢一
    老师,既然在连接层,是无序的,那在http/2中是怎么保证frame的有序性的呢?

    作者回复: tcp层是有序的,所以一个流里的多个帧会按照顺序依次到达,接收方只要依次接收就可以了。

    2019-09-09
  • 渴望做梦
    老师,我有个疑问,既然http2是二进制的格式,那我们还能用chrome自带的工具调试吗?

    作者回复: 可以的,Chrome会把二进制解码,还原为http/1的文本形式,你可以自己试一下。

    2019-08-29
  • 猫王者
    http1中消息的内容不也通过一定的编码比如utf8,将文本转成二进制,然后在网络上传输吗?http2和它又能有什么区别呢

    作者回复: 头部压缩,多路复用,优先级,服务器推送,优点太多了,这些都是http/1不具备的。

    2019-08-09
  • -W.LI-
    老师好。之前用MQ的时候,AMPT协议说是只打开一个长链接TCP链接。然后AMPT协议每次都是在这个链接里打开信道进行传输。队列和client(服务器)IP和端口基本固定,如果以TCP链接形式会占用很多端口号,还影响性能,所以就采用了信道。可是信道和信道之间如何实现数据隔离和马上要讲的http2的channel原理差不多么?

    作者回复: 不太了解AMPT,所以无法做比较,等讲http/2流细节的时候你可以对比一下。

    2019-08-06
    1
  • レイン小雨
    真好

    作者回复: thanks。

    2019-08-05
收起评论
11
返回
顶部