创建连接

TCP三次握手:包括客户端想服务端发起一个SYN包,接着服务端返回对应SYN的ACK响应以及新的SYN包,然后客户端返回对应的ACK.
如果客户端发起HTTPS连接,它还需要进行传输层安全协议(TLS)协商;TLS用来取代安全套接层.

HTTP1的问题

1.队头阻塞:允许一次发送一组请求,但是只能按照发送顺序一次接受响应.现代浏览器一般针对单个域名开启6个连接.
2.使用拥塞接口:在接受方确认数据包之前,发送方可以发出的TCP包的数量.慢启动:每次响应成功则加倍发送的数据包,失败则减半发送的数据包.
3.消息首部臃肿
4.受限的优先级设置
5.第三方资源
Web性能的最佳实践(HTTP1)
1.DNS查询优化
a.限制不同域名的数量
b.保证低限度的解析延迟
c.在主体页面HTML或响应中利用DNS预取指定的域名如:
<link rel="dns-prefetch" href="//ajax.googleapis.com>
2.优化TCP连接
a.利用preconnect指令,连接在使用之前就已经建立好.如:
<link rel="preconnect" href="//fonts.example.com" crossorigin>
b.借助CDN,在距离请求用户很近的边缘端点上,请求就可以获得响应.
3.避免重定向
4.客户端缓存

浏览器支持

任何不支持HTTP2的客户端都将简单的退回到HTTP1

HTTP1的优化,对于HTTP2的建议:

1.资源合并:在HTTP2下并非必要.
2.去除域名拆分:域名拆分是为了利用浏览器对每个域名开启多个连接的能力,以便实现资源的并行下载,绕过http1的串行化下载的限制.而http2的设计意图是采用多路复用,充分利用单个socket连接,而拆分域名会违背这种意图.
3.去除禁用cookie:应该避免为这些资源单位设立域名,因为http2采用了HPACK算法首部压缩,会显著减少巨型cookie(尤其是当它们在先后请求之间保持不变)的字节数.与此同时,禁用cookie的域名需要额外的主机名称,这意味着将开启更多的连接,与http2意图违背.

HTTP2帧类型

0x0 DATA:传输流的核心内容
0x1 HEADERS:包含http首部,和可选的优先级参数
0x2 PRIORITY:指示或更改流的优先级和依赖
0x3 RST_STREAM:允许一端停止流
0x4 SETTINGS:协商连接级参数
0x5 PUSH_PROMISE:提示客户端,服务器要推送些东西
0x6 PING:测试连接可用性和往返延时(RTT)
0x7 GOAWAY:告诉另一端,当前端已结束
0x8 WINDOW_UPDATE:协商一端将要接收多少字节
0x9 CONTINUATION:用以扩展HEADER数据块

http2优先级

1.依赖关系:为客户端提供了一种能力,通过指明某些对象对另一些对象有依赖,告知服务器这些对象应该优先传输.
2.权重:让客户端告诉服务器如何确定具有共同依关系的对象的优先级.

服务器推送局限

https2中,服务器会在第一次请求中就向客户端推送信息,这样虽然可以节省时间,不过也可能推送了客户端不需要的信息.客户端确实可以发送RST_STREAM帧来拒绝服务器的PUSH_PROMISE帧,但是RST_STREAM并不会即可到达,所以服务器还是会发送一些多余的信息.

首部压缩HPACK,为什么不是GZIP?

因为GZIP也有泄露加密信息的风险.比如GRIME攻击,攻击者在请求中添加数据,观察压缩加密后的数据量是否会小于预期.如果变小了,攻击者就知道注入的文本和请求中的其他内容(比如私有的会话cookie)有重复.在很短的时间内,经过加密的数据内容就可以全部搞清楚.

http2比http1多做的工作:

1.窗口大小调节
2.依赖树构建
3.维持首部信息的静态/动态表
4.压缩/解压缩首部
5.优先级调整(http2允许客户端多次调整单一请求的优先级)
6.预先推送客户端尚未请求的数据流

HTTP/2 学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

  10. NuGet学习笔记(3) 搭建属于自己的NuGet服务器

    文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...

最新文章

  1. oracle 加号和on,Oracle中连接与加号(+)的使用
  2. RecycleView 源码解析
  3. wpf 如何设置弹出窗口必须关闭才能打开其他软件_CAD如何打印才能不留白?原来打印图纸还有这么多技巧?...
  4. 剑指 Offer 面试题45:把数组排成最小的数——Python内置函数 map()、__lt__()、join()、sorted()
  5. FPGA状态机二段式
  6. 如何计算机网络打印机,电脑如何连接网络打印机?网络打印机的连接教程
  7. 外贸常用术语_对外贸易常用的贸易术语有几种?分别是,,,
  8. 工业互联网,姓工,名互
  9. Spark SQL的selectExpr用法
  10. 关于微信拉票之微信如何拉票及微信投票怎样拉票操作方法
  11. 塔勒布四部曲之《非对称风险》
  12. python中合法的赋值语句是_以下( )是合法的Python赋值语句。_学小易找答案
  13. 系统分析与设计——系统顺序图
  14. 图像/图片怎么resize?
  15. 【2073】三角形面积
  16. 通达OA2019数据库链接超时,应用中心报错的解决办法
  17. Hankson趣味题
  18. DHT算法的一知半解
  19. 视频剪辑软件,批量将MP4格式的视频转为GIF动图
  20. Python安全测试工具合集

热门文章

  1. 可编程ic卡 通用吗_8255可编程IC
  2. N Queen(代码、分析、汇编)
  3. 2013_hangzhou_online
  4. hihoCoder 1227 2015 北京网络赛 A题
  5. CodeForce 2A —— Winner
  6. 每日一题:leetcode74.搜索二维矩阵
  7. Linux网络编程服务器模型选择之并发服务器(下)
  8. linux交叉编译时报错:file not recognized: File format not recognized
  9. 孤儿进程、僵尸进进程
  10. System V 消息队列