聊聊http/2

本文作者:IMWeb 九月 原文出处:IMWeb社区 未经同意,禁止转载

随着web的发展,http/1.x 已经很难满足现在的需求,Google 因此开发了 SPDY 作为尝试, http/2 在此基础上应运而生。 此外,Google 已经宣布,2016年移除 Chrome 里对 SPDY 和 NPN 的支持,到此这个实验性的项目也算是功德圆满,可以寿终正寝了,在此不表。

命名

Is it HTTP/2.0 or HTTP/2?

The Working Group decided to drop the minor version (“.0”) because it has caused a lot of confusion in HTTP/1.x. In other words, the HTTP version only indicates wire compatibility, not feature sets or “marketing.”

参考 http://http2.github.io/faq/#is-it-http20-or-http2

rfc2616rfc7540

如果要说 http/1.1 最大的改进,大概要算 长连接 吧,而 http/2 的改进则更多一点:

  1. 使用二进制传输,取代之前的文本传输
  2. 连接复用(多路复用),并行
  3. 协议握手改进(ALPN)
  4. 重置(RST_STREAM)
  5. 优先级和依赖性
  6. Header 压缩
  7. 服务器推
  8. 流量控制

另外,关于 ALPN 和 NPN 可以参考 https://zlb.me/2013/07/19/npn-and-alpn/

http 还是 https

足够的关注使得 http2 在 TLS 上得以正常运作,SPDY 只支持 TLS,所以按理说TLS也应成为 http2 必需的组件,但出乎意料的是 http2 仅将TLS作为可选部分。然而,全球两大浏览器领导者 - Firefox和Chrome明确地表示,他们只实现基于TLS的http2。虽然有些浏览器厂商的发言人宣称他们不会实现这种 http2 会话方式,但IE团队已公开表示他们会实现,与此同时,curl已经支持该方式

只选择 TLS 的原因包括了保护用户隐私(妈妈再也不用担心运营商劫持了),早期的评估结果表明,将新的协议建立在 TLS 上(443端口)更可能成功。这也是因为所有来自80端口的流量都会被当作HTTP 1.1或者是其某个变种,而不是另外一个种全新的协议。

关于 ssl/tls,参考:http://drops.wooyun.org/tips/6002

支持情况

说来这么多,最关心的还是这货现在能不能用,答案是肯定的,不信你去看看 twitter.com (骗你的,这网站根本就不存在)

服务器支持

参考: https://github.com/http2/http2-spec/wiki/Implementations 很遗憾,到目前为止 nginxapache httpd 还不支持

浏览器支持

参考:http://caniuse.com/#feat=http2 看起来挺美好的,最新版本都支持了,然并卵:

  1. 兼容怎么办?
  2. 怎么升级?
  3. 切换到 https 会遇到什么问题?性能上会有多大影响?
  4. 合并打包策略还适用吗?
  5. 缓存策略是否依然有效?
  6. ...

参考:

  1. http://http2.github.io/
  2. https://www.gitbook.com/book/ye11ow/http2-explained/details
  3. https://github.com/http2/http2-spec/wiki/Implementations
  4. https://github.com/http2/http2-spec
  5. http://tools.ietf.org/html/rfc2616
  6. http://tools.ietf.org/html/rfc7540
  7. http://tools.ietf.org/html/rfc7301
  8. http://caniuse.com/#feat=http2
  9. https://zlb.me/2013/07/19/npn-and-alpn/
  10. http://tools.ietf.org/id/draft-agl-tls-nextprotoneg-03.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客生活

数据分析python技能之es数据提取

Elasticsearch 公司的产品栈非常全面,打通数据采集,传递,存储,展示,而且部署简单快速,半天时间就可以搭建一套完整的POC出来。

23230
来自专栏草根专栏

.NET Core TDD 前传: 编写易于测试的代码 -- 缝

举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到...

12570
来自专栏花叔的专栏

实践并解读最新的小程序码生成方式

花叔一看到这个新特性时就开始着手研究这特性怎么应用,经过一轮测试,终于有点成绩,来看看花叔的研究成果,希望对大家有用。

44460
来自专栏喵了个咪的博客空间

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)

#phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这...

37450
来自专栏FreeBuf

pyMagic:用python控制的Geek入门神器

原创作者:comover 大学四年快要结束了,这几年也学习了一点新的姿势。最近一直在跟国外的micropython项目,这个项目是由剑桥大学的理论物理学家(th...

43750
来自专栏机器人网

PLC选型必须了解的那些原则,详细,清楚!

随着PLC的推广普及,PLC产品的种类和数量越来越多,而且功能也日趋完善。近年来,从美国、日本、德国等国引进的PLC产品,加上国内厂家组装或自行开发的PLC产品...

30890
来自专栏北京马哥教育

让弹幕文明一点的Python屏蔽功能小实验

突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用python来试试写写看,结果还真玩出了点效果,思路是首先你得有一个脏话存放的仓库好到时候检测...

32950
来自专栏华仔的技术笔记

iOS应用架构谈 网络层设计方案

网络层在一个App中也是一个不可缺少的部分,工程师们在网络层能够发挥的空间也比较大。另外,苹果对网络请求部分已经做了很好的封装,业界的AFNetworking也...

41290
来自专栏王清培的专栏

.NET应用架构设计—表模块模式与事务脚本模式的代码编写

要想正确的设计系统架构就必须能正确的搞懂每个架构模式的用意,而不是胡子眉毛一把抓。现在有一个现象是什么呢,项目的结构从表面上看是很不错,层分的很合理,其实对业务...

9300
来自专栏Linux驱动

19.Linux-USB总线驱动分析

如下图所示,以windows为例,我们插上一个没有USB设备驱动的USB,就会提示你安装驱动程序 ? 为什么一插上就有会提示信息? 是因为windows自带了...

40980

扫码关注云+社区

领取腾讯云代金券