HTTP/2 简介
|
支撑现有 Web 服务的 HTTP 协议距离其发布时的 1997 年已经有些年月了,随后的 HTTP/1.1 版本发布自 1999 年。随着技术的进步和需求的进化,对于数据快速高效地传输,HTTP/1.1 显得捉襟见肘,大部分优化是在应用层来做的,因为协议是改不了的嘛,比如雪碧图减少请求数,域名共享(Domain sharing)增加同时建立的请求数。 SPDY 与 HTTP/2早在 2009 年,Google 便尝试推出了一个叫 SPDY 的实验性协议来对 HTTP/1.1 进行升级优化。在一个工作了这么久的协议上进行大的改进,如何做到对现有应用影响最小又收效显著,相信每个对历史代码有重构的开发者来说是能够体会的。所以 Google 在尝试对协议进行优化时,其目标是:
在最初的内部实验结果中,页面加载耗时的提升相当显著,达到了 55%。随后该协议在主流浏览器中得以实现,Chrome, Firefix 及 Opera,各大小公司也开始在其服务中部署实施。借着 SPDY 这波势头,HTTP 工作组 (HTTP Working Group/HTTP-WG)以其为基础开始了 HTTP/2 的提案,随后两者并行发展,SPDY 可看成是 HTTP/2 的一个实验分支,在这上面进行新功能开发和测试,然后将稳定的功能提交到 HTTP/2 草案中。 经过长时间的不断测试演进,2015 年 HTTP/2 通过了可发布的标准,是时,Chrome 团队给出了废弃 SPDY 的日程,开始了 HTTP/2 的时代。但其实早在此协议正式通过前,已经有好些浏览器及站点完整地实施了 HTTP/2,享受到了性能上的巨大提升。 HTTP/2 对于现有应用层的东西没有改变,比如 HTTP 动词,状态码,请求响应头。它的变动主要在数据格式及传输上,通过新增的分帧层(Frame layer)将这些变动和应用层隔离,所以对于应用层来说是透明的,现有 Web 应用可以不经任何修改就切到 HTTP/2。 关于版本为何不是 HTTP/1.2为了达到预期的性能优化,HTTP/2 中新增了二进制分帧层,这与现有 HTTP/1.1 协议的服务器及客户端是不兼容的,所以版本号来了个大升级。 除非你是服务器的开发者,需要关注这些底层的实现,否则对于应用来说,这些优化是服务器和客户端替你实现的,无须关心。 如何看站点使用的 HTTP 版本最简单的办法,通过浏览器的开发者工具中的网络面板查看。
Chrome DevTools 网络面板中查看 HTTP 版本 其中 也可使用
$ curl -I <url> 以下是 Bing 中国及百度的返回。
对 Bing 中国使用 curl 查看返回的结果
|
HTTP/2 简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- 搭建centos7的开发环境2-单机版Hadoop2.7.3配置
最近公司准备升级spark环境,主要原因是生产环境的spark和hadoop版本都比较低,但是具体升级到何种版本还不确定,需要做进一步的测试分析.这个任务对于大数据开发环境配置有要求,这里记录一下配置 ...
- httpd基础配置和虚拟主机的配置方法
RedHat6.5 httpd实验的大概步骤 #解包 tar zxf httpd-2.2.17.tar.gz -C /usr/src#切换到目录 cd /usr/src/httpd-2.2.17/# ...
- CSS学习笔记四:下拉选择框以及其动画特效
以前学的只是了解了css的一些基本属性,在做项目的时候都是直接使用bootstrap响应式来写项目,这样子很方便,很快捷,但是在自己看来还是有一点缺陷的,毕竟,我很多时候不怎么清楚它里面的具体运作.所 ...
- 从 源码 谈谈 redux compose
compose,英文意思 组成,构成. 它的作用也是通过一系列的骚操作,实现任意的.多种的.不同的功能模块的组合,用来加强组件. 看看源码 https://github.com/reactjs/red ...
- 基于ASP.NET MVC 微信网页登录授权(scope为snsapi_base) 流程 上 获取OPENID
流程图 我们需要判断是否存在OPENID 首先我们得先定义一个全局的OPENID 类似于普通账号密码登录系统的 当前登录用户ID 因为我是MVC 框架 我这里定义一个控制器基类 BaseCont ...
- python_函数设计
>>> def check_permission(func): def wrapper(*args,**kwargs): if kwargs.get('username')!='ad ...
- PAT1090:Highest Price in Supply Chain
1090. Highest Price in Supply Chain (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 C ...
- MATCH_PARENT和FILL_PARENT之间的区别?
很多人表示对于很多工程中的MATCH_PARENT出现在layout中感到不明白,过去只有FILL_PARENT和WRAP_CONTENT那么 match_parent到底是什么类型呢? 其实从And ...
- GO安全并发之无锁原子操作
声明:本文是<Go并发编程实战>的样章,禁止以任何形式转载此文. 摘要: 我们已经知道,原子操作即是进行过程中不能被中断的操作.也就是说,针对某个值的原子操作在被进行的过程当中,CPU绝不 ...
- backbone的一些认识
body,td { font-family: 微软雅黑; font-size: 10pt } 官网:http://backbonejs.org/ 作者:Jeremy Ashkenas 杰里米·阿什肯纳 ...







