一.HTTP1.1 主要问题
页面加载延迟
二.HTTP2 新概念:
HTTP2解决延迟问题,核心策略是提升数据发送效率
1.二进制协议
HTTP2是一个二进制的、基于数据包的协议。
HTTP1是完全基于文本的。
2.多路复用
HTTP1:一个请求一个连接,重复创建、启动连接消耗时间。很多浏览器对同时创建的连接个数限制是6(虽然看起来有多个连接,但是通常在网络层只有一个连接,所以最终会在网络层排队发送每个请求)打破一个域名6个链接的限制方案:域名分片(尽管通常这些域名指向同一个服务器)
优点:一个链路上的流量窗口限制不会影响其他链路上的资源请求效率。
缺点:重复创建、启动连接浪费时间(打开TCP连接需要时间,维护连接需更多的内存和CPU)。
HTTP2:同域名下只创建一个链接,用于请求该域名下的所有资源。避免重复创建链接浪费时间。
优点:节省了创建多个请求的时间。
缺点:该链路上的流量窗口控制会影响所有的资源请求效率。
3.流量控制功能
网络丢包对Http2影响很大,因为会大幅缩小链接上的可发送流量。
4.数据流优先级
HTTP2定义了两种不同的方法来设置优先级:流依赖和流权重。 目前的web服务器和浏览器,部分支持优先级设置。
5.首部压缩:
几种压缩算法:静态表、动态表
6.服务端推送
应用不多,可能被砍掉
三.一些概念
1.对头阻塞问题(HOL)
在队列首部的消息会阻塞后面消息的发送。
2.SSL、TLS、HTTPS(加密)
SSL是Netscape发明的,并非正式的互联网标准,但很差一段时间内SSLv3被认为是事实上的标准,直到2014年SSLv3被发现了重大漏洞,于是人们才开始大量向TLS迁移,但许多人仍将加密成为SSL,其他的有成为SSL/TLS或TLS。
3.CA
Certificate Authorities,证书颁发机构。
4.端口
HTTP默认端口是80,HTTPS默认端口是443
5.HTTPS
TLS 加密层握手(密钥协商)
TCP 传输层握手
6.常用的服务器
Apach :httpd
IIS :windows系统
Nginx :
Jetty :java web
Apach Tomcat :java web
Node.js 应用服务器
7.CWND
Congestion Window,拥塞窗口
TCP慢启动控制算法。
连接启动一开始只发送较少的数据包,确认网络没问题,数据包数量再随着时间的推移逐渐增加。
8.Http 优化
优化方法之一是,发送更少的请求,一次请求更多的资源,如精灵图(图片打包技术)
Https才能使用HTTP2标准
9.QUIC
1.Google发明的一个基于UDP的协议,目标时替换TCP和HTTP栈中的某些部分,已解决低效率因素。
2.TCP存在5个主要的问题,影响到了HTTP(HTTP需要可靠传输,与视频流协议不同,视频可以丢弃少量数据包,没有影响):
1)有一个连接创建的延迟。要在连接开始时协商发送方和接收方可以使用的序列号。
2)TCP慢启动算法限制了TCP的性能,它小心翼翼地处理发送的数据量,以尽可能防止重传。
3)不充分使用连接会导致限流阈值降低。如果连接未被充分使用,TCP会将拥塞窗口的大小减小,因为它不确定在上个最优的拥塞窗口之后网络参数有没有发生变化。
4)丢包也会导致TCP的限流阈值降低。TCP认为所有的丢包都是由窗口拥堵造成的,但其实并不是。
5)数据包可能被排队。乱序接收到的数据包会被排队,以保证数据时有序的。
3.QUIC的特性
1)大量减少连接创建时间
2)改善拥塞控制
3)多路复用,但不要带来队头阻塞
4)前向纠错
5)连接迁移
10.如何使用HTTP2
1.浏览器支持,现今绝大部分浏览器支持
2.服务器支持,可能要升级操作系统
3.若服务器不支持,则考虑以下方案
3.1 增加反向代理(CDN等)
3.2 在容器中运行Web服务器,如Docker
3.3 CDN(Content Delivery Network)实现(与使用反向代理类似)
通过DNS解析,请求连接到最近的CDN服务器(HTTP2,距离近则可快速处理客户端连接如TCP连接和HTTPS协商),请求再被路由到源服务器(HTTP1.1)。CDN服务器可缓存响应。
11.代理
代理将一个连接拆分为两部分
1.服务降级,如果代理不支持HTTP2,则拆分后的两个连接都需要降级为HTTP1.1
2.代理(标准拦截代理):标准代理保护网络免受外部影响,并给需要与外网通信的出站流量提供路由很多企业通过中间代理限制直接访问互联网,比如扫描威胁,并组织访问某些站点(出)。家庭用户,许多防病毒产品创建代理,扫描进入的web流量(入)
3.反向代理(如CDN)
反向代理处理来自外网的传入流量,允许访问不直接对外的服务器。
主要两种场景:
1.作为负载均衡服务器(F5/Citrix Netscaler/HAProxy)
2.用以卸载一些功能,如HTTPS或者HTTP2,有时不需要在整个链路都实现HTTP2,如反向代理进入内网环境可降级为HTTP
12.HTTP2的两个基本原理:
1.HTTP2使用多个二进制帧发送HTTP请求和响应,使用单个TCP连接,以流的方式多路复用。
2.HTTP2与HTTP1的不同主要在消息发送的层面上,在更上层,HTTP的核心概念不变。
13.HTTPS握手
使用HTTPS意味着使用SSL/TLS来加密一个标准的HTTP1连接或者HTTP2连接。公钥私钥加密被称为非对称加密,因为它加密和解密消息时,使用不同的密钥。这种类型的加密,在你连接到一个新的服务器时非常有必要,但它比较慢,所以这种加密方式用于协商一个对称加密的密钥。
除了用来生成对称加密密钥以外,这里的公钥和私钥也用于确认服务器身份。消息通过服务器端才有的私钥加密,使用证书中的公钥解密消息,通过这种方式来确认服务器身份。当HTTPS会话建立完成后,后续的连接(不管是并发的额外连接,还是后来重新打开的连接)可以跳过其中的某些步骤——如果它复用上次的加密密钥,这个过程叫TLS会话恢复。
参考文献:《HTTP/2 in Action 中文版》【美】Barry Pollard