HTTP/2 你需要知道的知识

原创 2016年01月22日 21:42:42

HTTP/2 是 HTTP 协议的第二个正式版本,于 2015 年 5 月 15 日正式发布,到现在短短半年时间里已经获得了大量的关注和实现支持。本文将介绍其核心的理念和相关知识要点。

可以通过访问 Akamai HTTP/2 测试页 来体会性能提升效果。本地测试结果差一个数量级 。

为何要有 HTTP/2

主要目标是优化性能,次要目标是安全性和互操作性。其实也是因为现在越来越多的 Web 应用,对性能等方面的需求。

最早的 HTTP/1.0 (RFC 1945,1996 年发布)中每个资源(文本、图片)默认要单独创建一个 TCP 连接来传输。创建一个 TCP 连接的时间成本是比较高的。

HTTP/1.1 (RFC 2616,1999 年发布,最近替代的是 2014 年 RFC 7230)是目前互联网世界的主流协议,通过优化对 TCP 连接的使用来提高效率,主要改进包括:

  • 默认采用持久化连接:同一个网页上的所有资源可以共用一个 TCP 连接;
  • 请求的流水化:多个请求可以不用等前面请求完成就一次性顺序发出(但应答消息还得顺序返回);
  • 其它特殊头字段(Host、Keep-Alive、Range 等)支持更多语义。

注:RFC 7230 中去掉了一个域名最多 2 个连接的限制。

来源

项目主页在 http2.github.io

HTTP/2 规范内容是基于 Google 提出的 SPDY 的 3 号草案,这也是为何实现如此之快。

Google 后来基于 SPDY 提了一个 QUIC 协议,试图基于 UDP 来实现类似 HTTP/2 的效果。

注:UDP 和 TCP 之争由来已久,只能说两者各有适合的场景,不能简单对比。

具体内容

核心思路是在继续遵循 HTTP 规范的前提下,(通过多路复用等手段)进一步提高对 TCP 连接的利用率,减少无谓的等待时间;同时采用头部压缩减少传输量。

实现上,在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层(分为 Header 帧和 Data 帧)。加层的做法果然是 IT 行业的瑞士军刀。

跟 HTTP/1.1 比,没变的:

  • HTTP 方法
  • HTTP 状态码
  • HTTP 语义

意味着原先基于 HTTP 设计的 API 照样可用。

改进的地方主要包括:

  • 用二进制流(Stream)代替原先的文本格式,一个连接可以并发多个流;
  • 流支持优先级和对其他流的依赖;
  • 流通过单独的窗口来控制流量;
  • 流可以通过重置帧来中断前面发出的消息;
  • 头部信息支持压缩(HPACK);
  • 除了客户端请求,服务器端也可以主动推送资源(例如页面中的各种元素资源);
  • TLS 规范中是可选的,但实现上 Chrome 和 Firefox 仅支持 TLS。

其中,HPACK 是采取基于字典(包括预置的静态字典和动态添加的动态字典)的压缩机制 + Haffman 编码进行编码。原来的域值现在只需要使用对应索引号即可。

相关规范

相关的两个 RFC:

前者是 HTTP/2 主体内容的规范,后者是头部压缩技术(HPACK)的规范。

正式版本之前先后经过 0~17 等 18 次草稿。

一般,通过 h2-x 表示是协议的第几版本草稿,h2 默认表示正式版。

技术组

包括 IETF HTTP Working Group 和 IETF Httpbis

前者是关于 HTTP 协议的官方机构;后者 2007 年成立,负责更新 HTTP/1.1 规范,是 RFC 7230 的提出者。

支持 HTTP/2 的项目

除了知名浏览器,其它项目包括 Apache HTTP Server 2.4.17+NginxChromiumcurlJettyNettyNodejs ,Wireshark等。

此外,部分国外网站也已经默认开启 HTTP/2 支持。

这里有 完整列表

扩展阅读

转载请注明:http://blog.csdn.net/yeasy/article/details/50564436

http相关知识 - (2)状态管理 - session

http相关知识 - (2)状态管理 - session
  • It_rod
  • It_rod
  • 2017年02月21日 22:44
  • 314

http相关知识 - (2)状态管理 - cookie

http相关知识 - (2)状态管理 1.http协议与状态保持 (1)Http协议本身是无状态的,每次的请求都是独立的,执行情况和前面的请求和之后的请求都没有直接关系。 (2)网络协议状态: w...
  • It_rod
  • It_rod
  • 2017年02月20日 21:43
  • 307

你应该知道的HTTP基础知识

你应该知道的HTTP基础知识 本文主要内容: HTTP请求报文格式HTTP响应报文格式Header请求体的3种形式推荐调试工具HTTP的组成图示 1. HTT...

Android面试题----Android开发也需要了解的TCP\IP和Http知识

下面这张图大家一定很熟悉,但面试时却经常想不起来! 左边是标准的OSI参考模型,共7层;右边是TCP/IP参考模型,分为4层。实际使用中更多的是右边的TCP/IP参考模型。对于TCP/IP的4层模型可...

http你不得不知道的那些事(一)--同源策略(2)

上一篇讲到CORS,这篇接着讲,争取在本篇内就把同源策略的内容讲完。 什么是CORS?CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它...

cocos2dx 3.x lua http请求网络图片,自己封装的,很好用,需要的可以看看

绑定了一个c++函数到lua,lua这边是这样调用的:    ---测试 http请求网络图片 的代码     local function HttpRequestCompleted(st...

http协议重要知识.txt

  • 2013年05月02日 14:25
  • 8KB
  • 下载

HTTP知识深入

  • 2017年04月04日 15:17
  • 533KB
  • 下载

通过Unity2D独立开发一款瓷砖式RPG游戏需要学习哪些知识?

作者:邓凯 链接:https://www.zhihu.com/question/25876314/answer/31853555 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业...

http状态码知识了解

  • 2009年05月19日 09:14
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP/2 你需要知道的知识
举报原因:
原因补充:

(最多只允许输入30个字)