http1.1与http2

263 阅读2分钟

HTTP1.0和HTTP1.1的- -些区别

  • 缓存处理, HTTP1.0中主要使用Last-Modified, Expires 来做为缓存判断的标准,HTTP1.1则引入了 更多的缓存控制策略: ETag, Cache-Control...

带宽优化及网络连接的使用,HTTP1.1支持断点续传, 即返回码是206 (Partial Content)

  • 错误通知的管理, 在HTTP1.1中新增了24个错误状态响应码,如409 (Conflict) 表示请求的资源与资源的当前状态发生冲突; 410 (Gone) 表示服务器上的某个资源被永久性的删除...

  • Host头处理, 在HTTP1.0中认为每台服务器都绑定- -个唯- -的IP地址, 因此,请求消息中的URL并没有传递主机名(hostname) 。但随着虚拟主机技术的发展,在- -台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享-一个IP地址。 HTTP1.1的请求消 息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告- 一个错误(400 Bad Request)

  • 长连接,HTTP1.1中默认开启Connection: kep-alive, - 定程度上弥补了HTTP1.0每次请求都要创建连接的缺点

HTTP2.0和HTTP1.X相比的新特性

  • 新的二进制格式(Binary Format) ,HTTP1.x的解析是基于文本, 基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合,基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮

  • header压缩, HTTP1.x的header带有大量信息, 而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小, 通讯双方各自cache- -份header fields表, 既避免了重复header的传输,又减小了需要传输的大小

  • 服务端推送 (server push),例如我的网页有 - -个sytle.css的请求, 在客户端收到sytle.css数据的同时, 服务端会将sytle,js的文件推送给客户端,当客户端再次尝试获取sytle js时就可以直接从缓存中获取到,不用再发请求了

    11通过在应用生成HTTP响应头信息中设盟Link命令

    Link: </styles ,css>; rel=preload; as=style, </example.png>; rel=preload; as=image
    
  • 多路复用 (MultiPlexing)

    HTTP/1.0每次请求响应, 建立个TCP连接, 用完关闭

    HTTP/1.1「长连接」 若干个请求排队串行化单线程处理, 后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞。

    HTTP/2.0「多 路复用」多个请求可以同时在一个连接上并行执行,某个请求任务耗时严重,不会影响到其他链接的正常执行。