HTTP 2 学习与翻译
来源:互联网 发布:钓鱼软件app 编辑:程序博客网 时间:2024/06/10 18:32
HTTP 2出了一段时间了,我也跟进下
翻译一下文档,学习下新技术
rfc7540 document
http://www.rfc-editor.org/rfc/rfc7540.txt
主要中文翻译
http://www.oschina.net/question/1397765_172789
浏览器支持对比:
http://caniuse.com/#feat=http2
百度FEX已经有翻译作参考
http://yuedu.baidu.com/ebook/478d1a62376baf1ffc4fad99###
跟进中
HTTP 2.0 相比 1.1 的更新大部分集中于:
- 多路复用
- HEAD 压缩
- 服务器推送
- 优先级请求
值得注意的是,通过客户端和服务器双方的对话来决定所有采用的协议,HTTP1.1和HTTP2.0将有望一起使用。对使用HTTP1.1的后端开发者而言,没有一个即将到来的硬性期限去必须使用HTTP2.0:HTTP1.1在一个可预见的期限内,仍然是一个可使用的标准。前端Web开发将发生翻天覆地的变化,网站会将开始使用2.0版本的新功能。
由于高质量的HTTP2.0的实现库的出现,HTTP API接口将不会有太大影响。只要2.0是和1.1版本一样易于实现,我们能够使用新特征来更加高效的使用带宽和持久连接。
流和多路传输
对于前端和REST APIs开发者而言,一个非常重要和有趣的变化是:连接将保持开放,只要他们留在该网页或网站。这个特性在1.1版本中需要建立一些持久连接才可以实现,新版本增加了支持在一个底层TCP连接下的多个帧流。对这些流可以设置优先权,传输数据的顺序只和同一个流的上下文环境有关。
这将使服务器发送最重要的数据,同时等待发送次重要数据。对于同时加载每个必要的资源,我们现在可以打开多个流在同一个连接下而不是打开多个连接,这样减少了HTTP的负荷。
服务器资源推送
另外一个新概念就是服务器通过既定的连接推送额外数据的能力。虽然这个概念并不是革命性的,毕竟归根结底它是TCP协议本身的特性。然而这种能力将会给广泛使用的HTTP带来不小的便利,也将有可能使HTTP API的易用性和全双工的TCP紧密结合在一起。
这种能力主要是为网页而设计的。高效网站减少网站请求的通常作法是通过精简资源比如图片和脚本的大小来提高网页渲染速度。有了推送的功能,服务器将能够主动告诉客户端需要请求哪些附加资源来渲染界面。
这个概念对于APIs使用来说也将很有用。例如API响应能够被更容易的进行批处理。一些已有的APIs可以批量调用,允许多个API的调用在一个请求里完成。更巧妙的一种做法可能是利用服务器推送这些响应而不是将这些响应组装到一个响应里面。
一个站点的连接数限制
在HTTP/1.1标准中有这样的描述:“一个单用户的客户端不能与任何服务器保持2个以上的连接”。这个限制和对头阻塞问题一起,严重限制了页面的性能。
HTTP/2打破这种限制并认为连接是持久的,只有当用户跳转后或者发生技术性故障事件时,连接才会关闭。对多路复用的使用将有助于降低页面性能瓶颈。
HTTP控制头的开销
当前的HTTP版本使用简单的、基于文本的HTTP头信息来控制通信。这样做的优点是非常简单且易于理解,调试也很简单,只需通过连接指定端口并输入一些文本。然而,使用基于文本的协议会让小的响应包不成比例地膨胀。此外,大量的HTTP响应几乎没有或者根本没有有效负载(比如,HEAD请求只是要确定资源是否发生变化)。为实际上只包含最后修改时间的响应,使用完全基于文本的头信息(大约有700个字节,在HTTP1.1中,它们不能被压缩,尽管很容易做到)是当前HTTP标准中,不可思议的浪费。
另一个思路是对HTTP头信息使用二进制编码。这种方式能够极大地提高较小请求的速度且占用的网络带宽非常小。这正是HTTP/2已经选择的方法,虽然以协议精神制定标准应该选择基于文本的协议,但是二进制的效率有令人信服的理由,让我们这样做。
HTTP/2带来的期望
HTTP/2标准是由IETF HTTP工作组创建的,该组织由来自Mozilla、Google、 Microsoft、Apple,以及其他公司的代表和工程师组成,由来自CDN领军公司Akamai的高级工程师Mark Nottingham任主席。因此,HTTP/2是一个为优化大型、高流量的网站而生的版本,它在实现简单、易于调试的基础上,确保了性能和网络带宽消耗。
该组织主席总结了一些HTTP/2的关键属性:
- 相同的HTTP API
- 成本更低的请求
- 网络和服务器端友好
- 缓存推送
- 思维革命
- 更多加密方式
- HTTP 2 学习与翻译
- Http Core学习(Http Components 翻译和学习)
- Shader Forge翻译与学习
- 翻译与学习HA-JDBC
- Elasticsearch5.0学习与理解翻译(一)
- Structuring Your TensorFlow Models-翻译与学习
- IOS线程的并发与处理(翻译自:http://www.objc.io/issue-2/concurrency-apis-and-pitfalls.html)
- 20140410-2 翻译学习作品
- ios Communicating with HTTP Servers 与HTTP服务器通信 官方文档翻译(五)
- iOS Communicating with Authenticating HTTP Servers 与HTTP服务器通信认证 官方文档翻译(六)
- http、https、http/2学习
- HTTP/1.1协议翻译
- HTTP routing[翻译]
- HTTP/2:让Web服务更快[翻译]
- Android绘图相关类文档学习与翻译
- Android绘图相关类文档学习与翻译(二)
- Android API Guides翻译与学习——Application Fundamentals
- HTTP学习笔记2
- C语言中的UNION
- C/C++数组学习(一)
- Java中的引用类型和垃圾回收
- [SSH_easyUI]细节4:后台主要代码
- android touch事件分发机制
- HTTP 2 学习与翻译
- 从项目中学习jsp知识
- enable dynamic db table creation勾选有什么用?
- hdu 1689 Alien’s Necklace
- 百度分词算法分析
- leetcode Longest Substring Without Repeating Characters
- php 45 上传图片预览
- 灵活组装Json的数据使用Gson的JsonParser和JsonReader解析Json详解例子
- Windows 下Apache2.2+MySql5.5+PHP5.4的安装和配置