Http2 介绍

PPT: https://pan.baidu.com/s/1geKsAL9

 

http2 from Google SPDY

浏览器的兼容性:
ie 11 才开始支持了http2.

TLS 是SSL的升级版。 增加了新的特性,在握手的时候就可以进行协商,等等新feature, 对协议做了升级。
ALPN 客户端指定,用得比较多。

http2 正在大规模使用了, 因为浏览器跟服务器都开始更新到http2. 已经比较成熟了。

http2 优点与作用:
试图减少终端用户的延迟。
解决head of line blocking (目前http1.1 还是串行的。 step by step的交互)
不需要多个连接(mobile 否则很耗电)
retain the semantics of http1.1 (http2 最重要的地方)(app层面不需要做任何改动,由底层库来做改动。 除非app层需要主动使用http2的特性)

http2 原理:
所有都复用一条链接 (one tcp connection)
request 抽象成Steam( steam are multiplexed and prioritized)
因为http可以是滑动窗口,可以乱序传输?

数据切片,binary framing layer
比如get的请求一边比较小, post 带一个大的body 就比较费时费力
server push : 目前这个机制还不太稳定,各个浏览器之间还在各种讨论之中
flow control : 发送不同的frame?

header compresion (hpack)

http2 建立在TLS之上, 被inject的概率小很多

http1.1
post XXX
host: www.baidu.com
content-type : …

[json]

–> http2:
headers frame
data frame

each frame 是变长,需要说明自己的长度 common header
steam, 不需要特殊的结构体

真正的互联网是网状的,并不是slide 之中看起来都线行
所以一定是乱序接受 -> 所以一定可以乱序发送

貌似第二次就不需要再发送header?

udp : reduce dns loopups
tcp : reuse connectoin (http2 是 single connection)
tcp : use a cdn
http: compress assets during transfer (gzip 等等, 有CVE显示Gzip头会泄露信息。 http2 是哈弗曼压缩)
http: cache / eliminate unnecessary resouces
http2 domain sharing (网易的图片有100个sub domain, 做的就是domain sharing)
domain sharing is bad for http2 因为基于TLS的connection 首次握手代价非常高

比如google: (具体没看懂)

之前在http1 之中 需要把各种小的资源文件合并成一个大的文件? -> 减少请求数
http2 鼓励分散,并将重要的资源文件放前面,优先渲染

优先级:
比如html/css优先级 > *.jpg
这个特性1.1不支持,需要在业务代码或者服务器配置上特殊说明

http2 test very carefully
由于历史原因,还有一些基于1.1的原因使得其有一些缺点:
1. 首次连接比较慢,基于TLS
2. 基于TCP连接, 最大的优点, 也是最大的缺点
丢包情况下,一旦丢包,基于TCP的http2 就会被影响严重(所有stream 都会被影响到,而1.1 只有丢包的connection被影响)
丢包: 线性加,乘性减

TLS:1.3 加速首次握手 直接带上用户数据

—-

google 的 quic 协议 (基于UDP,有可能成为以后的主流协议, 尝试解决了http2的主要问题)

一个demo网站: https://http2.akamai.com/demo

 


洋洋洒洒的流水账 O(∩_∩)O~

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注