看上去协议的格式和HTTP1.x完全不同了,实际上HTTP2并没有改变HTTP1.x的语义,只是把原来HTTP1.x的header和body部分用frame重新封装了一层而已
HTTP2连接上传输的每个帧都关联到一个“流”。流是一个独立的,双向的帧序列可以通过一个HTTP2的连接在服务端与客户端之间不断的交换数据。
实际上运输时:
HTTP2还有一些比较重要的改动:
使用HPACK对HTTP/2头部压缩
服务器推送
HTTP2推送资料:https://segmentfault.com/a/1190000015773338
流量控制
针对传输中的流进行控制(TCP默认的粒度是针对连接)
流优先级(Stream Priority)它被用来告诉对端哪个流更重要。
2.2HTTP2总结HTTP1.1新改动:
持久连接
请求管道化
增加缓存处理(新的字段如cache-control)
增加Host字段、支持断点传输等
HTTP2新改动:
二进制分帧
多路复用
头部压缩
服务器推送
参考资料:
HTTP2 GitBook电子书(中文版):https://legacy.gitbook.com/book/ye11ow/http2-explained/details
HTTP/2.0 相比1.0有哪些重大改进?https://www.zhihu.com/question/34074946
HTTP/2 新特性浅析:https://segmentfault.com/a/1190000002765886
HTTP2学习资料:https://imququ.com/post/http2-resource.html
HTTP2简介和基于HTTP2的Web优化:
http2原理入门:https://blog.qingf.me/?p=600
HTTP/2 对现在的网页访问,有什么大的优化呢?体现在什么地方?https://www.zhihu.com/question/24774343/answer/96586977
HTTP/2笔记之流和多路复用:
2.3HTTPS再次回顾之前在面试的时候被问到了HTTPS,SSL这样的知识点,也没答上来,这里也简单整理一下。
首先还是来解释一下基础的东东:
对称加密:
加密和解密都是用同一个密钥
非对称加密:
加密用公开的密钥,解密用私钥
(私钥只有自己知道,公开的密钥大家都知道)
数字签名:
验证传输的内容是对方发送的数据
发送的数据没有被篡改过
数字证书(Certificate Authority)简称CA
认证机构证明是真实的服务器发送的数据。
3y的通讯之路:
远古时代:3y和女朋友聊天传输数据之间没有任何的加密,直接传输
内容被看得一清二楚,毫无隐私可言
上古时期:使用对称加密的方式来保证传输的数据只有两个人知道
此时有个问题:密钥不能通过网络传输(因为没有加密之前,都是不安全的),所以3y和女朋友先约见面一次,告诉对方密码是多少,再对话聊天。
中古时期:3y不单单要跟女朋友聊天,还要跟爸妈聊天的哇(同样不想泄漏了自己的通讯信息)。那有那么多人,难道每一次都要约来见面一次吗?(说明维护多个对称密钥是麻烦的!)--->所以用到了非对称加密
3y自己保留一份密码,独一无二的(私钥)。告诉3y女朋友,爸妈一份密码(这份密码是公开的,谁都可以拿--->公钥)。让他们给我发消息之前,先用那份我告诉他们的密码加密一下,再发送给我。我收到信息之后,用自己独一无二的私钥解密就可以了!
近代:此时又出现一个问题:虽然别人不知道私钥是什么,拿不到你原始传输的数据,但是可以拿到加密后的数据,他们可以改掉某部分的数据再发送给服务器,这样服务器拿到的数据就不是完整的了。
3y女朋友给3y发了一条信息”3y我喜欢你“,然后用3y给的公钥加密,发给3y了。此时不怀好意的人截取到这条加密的信息,他破解不了原信息。但是他可以修改加密后的数据再传给3y。可能3y拿到收到的数据就是”3y你今晚跪键盘吧“
现代:拿到的数据可能被篡改了,我们可以使用数字签名来解决被篡改的问题。数字签名其实也可以看做是非对称加密的手段一种,具体是这样的:得到原信息hash值,用私钥对hash值加密,另一端用公钥解密,最后比对hash值是否变了。如果变了就说明被篡改了。(一端用私钥加密,另一端用公钥解密,也确保了来源)