作者回复: 回答的非常好。
作者回复: 基本正确。
http/1的问题一个是队头阻塞,另一个是报文头数据冗余,多个小请求会浪费带宽,所以资源合并、内联就很有必要。
作者回复: 回答的很好。
对于第三点,域名分片对于http/2会增加连接成本、HPack字典、慢启动等多个不利因素,所以应该少用。
最后的综合篇还会再讲一下。
作者回复:
1.可以参考一下第17讲,里面解释了域名分片。
2.资源内联,就是把比较小的图片、js等资源编码成base64,以文本的形式嵌入进html,这样通过一次请求就可以下载到更多的数据。
作者回复: 加密版本你理解的是正确的。
对于非加密版本,http/2要求使用upgrade机制升级到http/2,步骤比alpn要复杂一些,可以参考rfc。
作者回复: 迁移到http/2还需要考虑运维、部署等成本,技术上的难度倒是不大。
作者回复: 是的,这个magic的确是显得有点“多余”,但协议标准里就是这么规定的,只能遵守。
在rfc里,对这个的说明是对协议的最终确认,相当于是一个简单的校验机制,也可以理解成是正式收发数据前的“握手”,确认是http/2而不是其他的协议。
作者回复: http/1开多个连接,而http/2只有一个连接,弱网下多个连接显然要比一个连接的传输效果好。
作者回复:
1.在http/2协议里没有操作系统线程的概念,应用发送数据需要自己处理socket的并发读写,但数据写入socket后就会由http/2自己分帧管理,实现多路复用。
2.http/2用一个连接能够实现最佳性能,可以省去连接、慢启动等成本,当然因为tcp层有队头阻塞,所以在网络质量差时会有性能损失。
3.多个网卡就是多个ip地址,就可以开多个连接,但每个http/2连接就会重建hpack动态表、慢启动,效率会低一点。
作者回复: 当然可以,服务器会根据alpn告诉客户端使用http/1。