HTTP/2 学习笔记

创建连接

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://www.mzph.cn/news/389684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的变量分类总结

在MySQL中&#xff0c;my.cnf是参数文件&#xff08;Option Files&#xff09;&#xff0c;类似于ORACLE数据库中的spfile、pfile参数文件&#xff0c;照理说&#xff0c;参数文件my.cnf中的都是系统参数&#xff08;这种称呼比较符合思维习惯&#xff09;&#xff0c;但是官方…

859. 亲密字符串

859. 亲密字符串 给你两个字符串 s 和 goal &#xff0c;只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果&#xff0c;就返回 true &#xff1b;否则返回 false 。 交换字母的定义是&#xff1a;取两个下标 i 和 j &#xff08;下标从 0 开始&#xff09;且满足 …

python函数不同类型参数顺序

python函数的参数定义顺序必须为&#xff1a; 必须参数&#xff08;位置参数&#xff09;&#xff0c;默认参数&#xff0c;可变参数&#xff0c;命名关键字参数&#xff0c;关键字参数 如以下定义&#xff1a; def f1(a, b, c0, *args, d, **kw): print(a , a, b , b, c , c, …

亚洲国家互联网渗透率_发展中亚洲国家如何回应covid 19

亚洲国家互联网渗透率The COVID-19 pandemic has severely hit various economies across the world, with global impact estimated between USD 6.1 trillion and USD 9.1 trillion, equivalent to a loss of 7.1% to 10.5% of global gross domestic product (GDP).[1] More…

create-react-app项目使用假数据

做新项目的时候&#xff0c;前端每次要等后端接口准备好再开始&#xff0c;就会延期&#xff0c;等后端接口准备好了&#xff0c;前端这边的项目又会相互紧张&#xff0c;如果前端跟后端同时进行&#xff0c;前期将框架&#xff0c;基础做好&#xff0c;定好接口文档&#xff0…

1854. 人口最多的年份

1854. 人口最多的年份 给你一个二维整数数组 logs &#xff0c;其中每个 logs[i] [birthi, deathi] 表示第 i 个人的出生和死亡年份。 年份 x 的 人口 定义为这一年期间活着的人的数目。第 i 个人被计入年份 x 的人口需要满足&#xff1a;x 在闭区间 [birthi, deathi - 1] 内…

snake4444勒索病毒成功处理教程方法工具达康解密金蝶/用友数据库sql后缀snake4444...

*snake4444勒索病毒成功处理教程方法 案例&#xff1a;笔者负责一个政务系统的第三方公司的运维&#xff0c;上班后发现服务器的所有文件都打不开了&#xff0c;而且每个文件后面都有一个snake4444的后缀&#xff0c;通过网络我了解到这是一种勒索病毒。因为各个文件不能正常打…

有史以来最漂亮的游戏机

The recent reveal of the PlayStation 5’s design has divided the gaming world. There are those who appreciate its bold, daring industrial design and those who would have preferred something a little less outlandish; perhaps a little more traditional.吨 他最…

springboot-添加拦截器

在我们日常开发的过程中&#xff0c;经常会遇到这一类问题&#xff0c;要求需要用户登录以后才能够访问其他的内容&#xff0c;否则不行&#xff0c;那么解决这一问题最好的办法就是运用拦截器&#xff0c;拦截器可以和多种处理请求的web框架结合&#xff0c;今天所讲的就是与s…

1945. 字符串转化后的各位数字之和

1945. 字符串转化后的各位数字之和 给你一个由小写字母组成的字符串 s &#xff0c;以及一个整数 k 。 首先&#xff0c;用字母在字母表中的位置替换该字母&#xff0c;将 s 转化 为一个整数&#xff08;也就是&#xff0c;‘a’ 用 1 替换&#xff0c;‘b’ 用 2 替换&#…

墨刀原型制作 位置选择_原型制作不再是可选的

墨刀原型制作 位置选择The ‘role’ of a designer has been a topic of discussion several many years now. In the past decade, the role of a Designer got split into several different roles like — Graphic Designer, User Experience Designer, Interaction Designe…

eclipse maven 构建简单springmvc项目

环境&#xff1a;eclipse Version: Oxygen.3a Release (4.7.3a) 创建maven Project项目&#xff0c;目录结构 修改工程的相关编译属性 修改pop.xml&#xff0c;引入springmvc相关包 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.…

1859. 将句子排序

1859. 将句子排序 一个 句子 指的是一个序列的单词用单个空格连接起来&#xff0c;且开头和结尾没有任何空格。每个单词都只包含小写或大写英文字母。 我们可以给一个句子添加 从 1 开始的单词位置索引 &#xff0c;并且将句子中所有单词 打乱顺序 。 比方说&#xff0c;句子…

医动力Android基于CC组件化框架的探索与实践

为什么要组件化? 医动力App作为公司的核心产品已经有多年历史了,随着版本的不断迭代,功能越来越多,代码量越来越大,不可避免的会产生一下问题: 业务越来越复杂&#xff0c;维护成本高;业务耦合度高&#xff0c;代码越来越臃肿&#xff0c;团队内部多人协作开发困难;编译时间长…

使用协同过滤推荐电影

ALSO, ARE RECOMMENDER SYSTEMS INFLUENCING OUR TASTE??此外&#xff0c;推荐系统是否影响我们的口味&#xff1f; An excerpt on creating a movie recommender system similar to the OTT platforms.有关创建类似于OTT平台的电影推荐系统的摘录。 INTRODUCTION介绍 For…

423. 从英文中重建数字

423. 从英文中重建数字 给你一个字符串 s &#xff0c;其中包含字母顺序打乱的用英文单词表示的若干数字&#xff08;0-9&#xff09;。按 升序 返回原始的数字。 例 1&#xff1a;输入&#xff1a;s "owoztneoer" 输出&#xff1a;"012"示例 2&#xf…

锦欣生殖获战略投资,华平、信银领投,红杉、药明康德跟投

9月16日消息&#xff0c;锦欣生殖近日宣布已完成新一轮的战略投资&#xff0c;本轮融资由原战略股东华平投资及新引入的中信银行旗下信银投资领投&#xff0c;红杉资本中国基金、药明康德等跟投。完成本轮融资后&#xff0c;华平投资及信银投资分别成为锦欣生殖的第二及第三大股…

数据暑假实习面试_面试数据科学实习如何准备

数据暑假实习面试Unfortunately, on this occasion, your application was not successful, and we have appointed an applicant who…不幸的是&#xff0c;这一次&#xff0c;您的申请没有成功&#xff0c;我们已经任命了一位符合以下条件的申请人&#xff1a; Sounds famili…

两道简单的入门题

1&#xff09;  for循环求100以内奇数和 1 #include<stdio.h> 2 int main(){ 3 int ans0;//定义一个答案变量存储答案 4 for(int i1;i<100;i)//用for从1循环到100&#xff0c;如果i%2&#xff01;0&#xff08;%是一种取余运算&#xff09; 5 if(…

1716. 计算力扣银行的钱

1716. 计算力扣银行的钱 Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。 最开始&#xff0c;他在周一的时候存入 1 块钱。从周二到周日&#xff0c;他每天都比前一天多存入 1 块钱。在接下来每一个周一&#xff0c;他都会比 前一个周一 多存入 1 块钱。 给你 …