HTTP/2.0与HTTP/1.1区别

  1. 采用二进制格式(Binary Format)解析
  2. 多路复用(MultiPlexing)
  3. header压缩
  4. 服务端推送(server push)

https://http2.github.io/

新的二进制格式(Binary Format)

HTTP1.x的解析是基于文本,HTTP2.0的协议解析采用二进制格式。HTTP2.0所有数据以二进制传输。

二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。

多路复用(MultiPlexing)

HTTP2.0的多路复用和HTTP1.X中的长连接复用有什么区别

HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接。

  • HTTP/1.1 试过用流水线(pipelining)来解决这个问题, 若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞。此外, 由于网络媒介(intermediary )和服务器不能很好的支持流水线, 导致部署起来困难重重。

  • HTTP/2多个消息的请求和响应可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行。

header压缩

HTTP/2 对消息头采用 HPACK 进行压缩传输,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

服务端推送(server push)

当浏览器请求一个网页时,服务器将会发回HTML,在服务器开始发送JavaScript、图片和CSS前,服务器需要等待浏览器解析HTML和发送所有内嵌资源的请求。服务器推送服务通过“推送”那些它认为客户端将会需要的内容到客户端的缓存中,以此来避免往返的延迟。

HTTP历史

HTTP瓶颈

  • 一条连接上只可发送一个请求。
  • 请求只能从客户端开始。客户端不可以接收除响应以外的指令。
  • 请求/响应首部未经压缩就发送。首部信息越多延迟越大。
  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
  • 可任意选择数据压缩格式。非强制压缩发送。

影响一个HTTP网络请求的因素主要有两个:带宽和延迟。

Ajax的解决方法

从已加载完毕的页面发起请求,只更新局部页面。

Comet的解决方法

一旦服务器有内容更新了,不等待请求,直接给客户端返回响应。模拟服务器向客户端推送的功能。

SPDY的目标

Google在2010发布了SPDY,其开发目标旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间(50%)。

SPDY:HTTP1.x的优化

http://www.chromium.org/spdy/

SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话的形式运作。同时,考虑到安全性问题,SPDY规定通信中使用SSL。

SPDY特点

1.多路复用流

通过单一的TCP连接,可以无限制处理多个HTTP请求。所有请求的处理都在一条TCP连接上完成,因此TCP的处理效率得到提高。

2.赋予请求优先级

SPDY不仅可以无限制地并发处理请求,还可以给请求逐个分配优先级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题。

3.压缩HTTP首部

压缩HTTP请求和响应的首部,通信产生的数据包数量和发送的字节数就变少了。

4.推送功能

支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送数据,而不必等待客户端的请求。

5.服务器提示功能

服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求。

SPDY消除web瓶颈了吗

SPDY只是将单个域名(IP地址)的通信多路复用,当一个网站上使用多个域名下的资源,改善效果受限。

SPDY的确是一种可有效消除HTTP瓶颈的技术。

还有非HTTP瓶颈导致的速度提升问题,比如改善web内容的编写方式等。

使用浏览器进行全双工通信的WebSccket

WebSocket通信协议在2011年被定为标准。

web浏览器与web服务器之间全双工通信标准。主要为了解决Ajax和Comet里XMLHttpRequest附带的缺陷所引起的问题。

WebSccket协议

一旦web服务器与客户端之间建立起webSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML或图片等任意格式的数据。

WebSccket特点

1. 推送功能

服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。

2. 减少通信量

只要建立起WebSocket连接,就希望一直保持连接状态。和HTTP相比,不但每次连接时的总开销减少,而且由于WebSocket的首部信息很小,通信量也相应减少了。

3. 没有同源限制

没有同源限制,客户端可以与任意服务器通信。

4. 协议标识符是ws

协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

ws://example.com:80/some/path

WebSccket实现

实现WebSocket通信,在HTTP连接建立后,需要完成一次“握手”的步骤。

握手-请求

握手-相应

成功握手确立WebSocket连接之后,通信时不再使用HTTP的数据帧,而采用WebSocket独立的数据帧。

W3C The WebSocket API
http://www.ruanyifeng.com/blog/2017/05/websocket.html

HTTP/2.0:SPDY的升级版

HTTP/2.0的目标是改善用户在使用Web时的速度体验。

HTTP2.0和SPDY的区别

HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS

HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE

HTTP/2.0的特点

  • SPDY
  • HTTP Speed + Mobility
  • Network-Friendly HTTP Upgrade

HTTP Speed + Mobility 是用于改善并提高移动端通信时速度和性能的标准。基于SPDY和WebSocket。

Network-Friendly HTTP Upgrade 主要是在移动端通信时改善HTTP性能的标准。

HTTP1.1和HTTP1.0的区别

  • HTTP1.1增加host字段。HTTP1.1请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  • HTTP1.1新增状态码。比如100、409(Conflict)、410(Gone)等。
  • HTTP1.1支持长连接。HTTP1.1中默认开启Connection: keep-alive
  • HTTP1.1支持分块传输
  • 带宽优化及网络连接的使用。HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content)
  • 缓存处理。在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

更多-more