http2.0

HTTP2.0

  1. TCP

1.1 TCP/IP协议关系

http2.0

    1. TCP工作过程

1.2.1 TCP报文格式

http2.0

  1. 序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
  2. 确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

1.2.2 TCP标志位

  1. SYN(synchronous),建立联机。
  2. ACK(acknowledgement),确认。
  3. PSH(push),传输。
  4. FIN(finish),结束。
  5. RST(reset),重置。
  6. URG(urgent),紧急。

1.2.3 TCP三次握手和四次挥手

http2.0

http2.0

 

  1. Http请求

2.1请求过程

http2.0

2.2DNS解析过程

http2.0

  1. HttpHttps

3.1 Https是什么

HTTPS (基于安全套接字层的超文本传输协议) 是一个 Netscape 开发的 Web 协议。HTTPS 在 HTTP 应用层的基础上使用安全套接字层作为子层。

HTTPS = HTTP + SSL。

3.2 为什么需要Https

HTTP 使用请求/响应的过程,因此信息可在服务器间快速、轻松而且精确的进行传输,但 HTTP 是不安全的,可以轻松对窃听你跟 Web 服务器之间的数据传输。在很多情况下,客户和服务器之间传输的是敏感歇息,需要防止未经授权的访问。

3.3 Http与Https区别

  1. HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
  2. HTTP 是不安全的,而 HTTPS 是安全的
  3. HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
  4. HTTP 无需加密,而 HTTPS 对传输的数据进行加密
  5. HTTP 无需证书,而 HTTPS 需要认证证书

 

3.4 HTTPS认证过程

  1. 服务器把自己的公钥登录至数字证书认证机构。
  2. 数字证书机构把自己的私有**向服务器的公开密码部署数字签名并颁发公钥证书。
  3. 客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开**,向数字证书认证机构验证公钥证书上的数字签名。以确认服务器公钥的真实性。
  4. 使用服务器的公开**对报文加密后发送。
  5. 服务器用私有**对报文解密。

3.5Https应用场景

银行网站、支付网关、购物网站、登录页、电子邮件以及一些企业部门的网站应该使用 HTTPS。

4 HTTP 1.0 / 1.1 / 2.0

http2.0

4.1 HTTP1.0

4.1.1 HTTP请求方法

GET、POST、HEAD

 

4.1.2性能问题

  1. 链接无法复用

http 1.0 规定浏览器与服务器保持较短时间的链接,浏览器每次请求都和服务器经过三次握手和慢启动(基本思想是当TCP开始传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞)建立一个TCP链接,服务器完成请求处理后立即断开TCP链接,而且不跟踪每个浏览器的历史请求。

  1. 线头阻塞

请求队列的第一个请求因为服务器正忙(或请求格式问题等其他原因),导致后面的请求被阻塞。

    1. HTTP1.1

4.2.1 HTTP1.1新增方法

PUT、DELETE、OPTIONS、CONNECT、TRACE

      1. HTTP1.1 优化
  1. 支持持久链接(request和response中的header中的connection是close或者Keep-Alive进行控制)

一个TCP链接可以传送多个http请求和相应,减少了TCP建立链接和关闭链接的消耗。另外http1.1允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。

 

  1. 增加了请求头和响应头来扩充功能

支持Host请求

支持Connection

支持断点续传

身份认证

状态管理

缓存处理

  1. 100-continue响应码(节约带宽)

当请求报文的请求体数据很大时,如果贸然的将这个http请求发送给服务器是不合适的。因为服务器可能不接受这个请求,这样就造成了大量的传输带宽浪费。允许客户端在发request消息body之前先用只含header的request试探一下server,看server是否允许接收这个request,再决定要不要发request body。

    1. HTTP2.0

https://http2.akamai.com/demo

 

4.3.1 HTTP2.0与1.x区别

HTTP2.0,相较于HTTP1.x,大幅度的提升了web性能。在与HTTP/1.1完全语义兼容的基础上,进一步减少了网络延迟和传输的安全性。

在开放互联网上HTTP 2.0将只用于https://网址

HTTP/2 的目的是通过支持请求与响应的多路复用来较少延迟,通过压缩HTTPS首部字段将协议开销降低,同时增加请求优先级和服务器端推送的支持。

 

4.3.2影响HTTP请求的因素

  1. 带宽
  2. 延迟
  1. 浏览器阻塞
  2. DNS查询
  3. 建立连接

4.3.3 HTTP2.0新特性

1 二进制帧

HTTP2.0在应用层(HTTP)和传输层(TCP or UDP)之间增加一个二进制分帧层。

HTTP1.x的解析是基于文本的,基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多。而HTTP/2会将所有传输的信息分割为更小的消息和帧,然后采用二进制的格式进行编码,HTTP1.x的头部信息会被封装到HEADER frame,而相应的Request Body则封装到DATA frame里面。不改动HTTP的语义,使用二进制编码,实现方便且健壮。

 

2 多路复用

HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。

多路复用允许同时通过单一的 HTTP 2.0 连接发起多重的请求-响应消息,减少了因http链接多二引起的网络拥塞(在 HTTP1.1 协议中,同一时间,浏览器会针对同一域名下的请求有一定数量限制),解决了慢启动针对突发性和短时性的http链接低效的问题。

http2.0

3 流量控制

HTTP/2利用流来实现多路复用,这引入了对TCP连接的使用争夺,会造成流被阻塞。流量控制方案确保在同一连接上的多个流之间不会造成破坏性的干扰。流量控制会用于各个独立的流,也会用于整个连接。  

 

流量控制窗口 (Flow Control Window)

WINDOW_UPDATE帧

 

算法描述

发送端保有一个流量控制窗口(window)初始值。初始值的设定请参考SETTING 帧的 SETTINGS_INITIAL_WINDOW_SIZE

发送端每发送一个DATA帧,就把window递减,递减量为这个帧的大小。如果当前window小于帧大小,那么这个帧就必须被拆分到不大于window,如果window等于0,就不能发送任何帧

接收端可以发送 WINDOW_UPDATE帧给发送端,发送端以帧内指定的Window Size Increment作为增量,加到window上

 

4 服务器端推送

服务器端的推送,就是服务器可以对一个客户端请求发送多个响应。除了对最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确地请求。当浏览器请求一个html,服务器其实大概知道你是接下来要请求资源了,而不需要等待浏览器得到html后解析页面再发送资源请求。

http2.0

5 首部压缩

在HTTP1.x中,首部元数据都是以纯文本形式发送的,通常会给每个请求增加500~800字节的负荷。为减少这些开销并提升性能,HTTP 2.0会压缩首部元数据(HPACK算法)。

http1.x的header由于cookie和user agent很容易膨胀,而且每次都要重复发送。http2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。高效的压缩算法可以很大的压缩header,减少发送包的数量从而降低延迟。

 

 

5 HTTP2支持

5.1浏览器支持

http://caniuse.mojijs.com/Home/Html/item/key/http2/index.html

5.2Tomcat支持

版本要大于 Tomcat 9.0.0 M4

https://zhuanlan.zhihu.com/p/21349186?refer=tomcat

5.3 Nginx支持

版本要大于nginx1.9.5

http://phl.iteye.com/blog/2251697