`

未来的web基础——SPDY <一>(转)

 
阅读更多
前端应用的许多优化都是围绕网络开展的。Yahoo的35条网站优化实践中第一条便是Minimize HTTP Requests。前端工程师们为这些优化做了许多努力与探索,比如CSS sprits,比如CDN combo。天河就经常做CSS sprits,这个虽然有自动化工具。不过尴尬的是,主要是半自动化工具,还是要做部分工作来保证的。于是搞个CSS sprits常常花上小半天时间(苦逼的活呀)。
最近看了些关于SPDY的文章,忽然觉得,如果类似SPDY这样的中间协议(TCP之上,HTTP的补充)被大量应用了,其实我们就不需要太刻意关注最小化HTTP请求数了(YY中…)。支持一个TCP连接中无限的并发HTTP请求,是最吸引我的一个SPDY特性了。
如今,大家写的web应用都是通过HTTP与TCP协议传输的。TCP协议工作在传输层,HTTP协议则工作在应用层。不幸的是,今天在web上传播的内容与10年前有着显著的区别,HTTP传输已经渐渐无法满足人们的需要了。
每个HTTP连接只请求一个资源(HTTP pipelining做了改善,不过大大增加了复杂度,并不流行)。浏览器只好通过建立多个连接来解决此问题(你应该刻意了解过各主流浏览器支持的并发连接数吧)。
HTTP只允许由客户端发起请求。纵使服务端知道客户端需要一个资源,它也没有相关机制来通知客户端。服务端只能等待客户端发送一个请求。
未压缩的请求及响应头。现在的应用普遍使用更多的cookie、客户端自定义扩展等,一个典型的请求头还是不小的。对于猫或者ADSL这种上行带宽非常低的连接来说,还是很有影响的。
冗余的头。HTTP头在同一个会话里是反复发送的。但是,头信息中的User-Agent,Host以及Accept*等固定信息是不需要重复发送的。
非强制的数据压缩。
这么多的HTTP缺点都是Google罗列的,是SPDY协议努力的方向。SPDY希望实现降低一半的页面加载时间(据实验结果看,已经接近这个目标了),同时避免增加部署的复杂度。SPDY的具体目标有:
允许多个并发HTTP请求共用一个TCP会话。
压缩HTTP头,舍弃不必要的头信息。
协议要易于实现并且高效。
强制使用SSL传输协议,以换取更好的安全性和对现有网络系统的兼容。虽然SSL也会带来一些延迟,但Google相信长远地看,未来的web离不开安全的网络连接。
允许服务端向客户端发起一个会话,以及向客户端推送数据。
简单说下SPDY的设计及特性。

如上图,SPDY在SSL之上增加了一个session层,用来支持在一个TCP连接里实现多路复用的交叉流。原有的HTTP GET及POST消息格式保持不变;不过,SPDY制定了一个新的用于编码及传输的帧格式。流是双向的,可以由客户端或服务端发起。
SPDY特性分为基本特性(默认开启)与高级特性(可选启用)两部分。都为降低网络延迟努力。
基本特性有:
多路复用流。SPDY实现了单TCP连接中无限制的并发流。由于请求在单个信道内是交叉的,TCP的效率会更高。
请求优先级。虽然可以并发请求,但网络总有可能堵塞,所以还是要给请求分下优先级。
压缩HTTP头,舍弃不必要的头信息。
高级特性有:
Server push。就是允许服务端发起通信。
Server hint。服务端可以提示客户端可以获取某某资源了。
好了,先介绍这么多。如果你和我一样,好奇SPDY怎么应用,可以在Chrome里打开个gmail啥的,然后打开这个链接满足下好奇心。
chrome://net-internals/#events&q=type:SPDY_SESSION%20is:active
其实发现想细致了解里面各种名词,真不是一篇文章能介绍清楚的。天河也查了好久,稍详细的介绍跟实践待续哈。
分享到:
评论

相关推荐

    platform-external-okhttp:linaro android4.4 externalokhttp

    &lt; version&gt;(insert latest version)&lt;/ version&gt; &lt;/ dependency&gt; 建造 在桌面上 使用 Maven 在桌面上运行 OkHttp 测试。 在桌面上运行 SPDY 测试使用需要 OpenJDK 7+ 的 。 mvn clean test 在设备上 OkHttp 的测试...

    PostDataToGoogleForm:此仓库是为将数据从android发布到Google表单而开发的

    &lt; artifactId&gt;okhttp&lt;/ artifactId&gt; &lt; version&gt;2.4.0&lt;/ version&gt; &lt;/ dependency&gt; 执照 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance

    okhttp:https

    &lt; artifactId&gt;okhttp&lt;/ artifactId&gt; &lt; version&gt;2.5.0&lt;/ version&gt; &lt;/ dependency&gt; 或Gradle: compile ' com.squareup.okhttp:okhttp:2.5.0 ' 中提供了开发版本 。 MockWebServer 用于测试HTTP,HTTPS,...

    external_okhttp

    &lt; artifactId&gt;okhttp&lt;/ artifactId&gt; &lt; version&gt;2.3.0&lt;/ version&gt; &lt;/ dependency&gt; 或Gradle: compile ' com.squareup.okhttp:okhttp:2.3.0 ' 中提供了开发版本 。 MockWebServer 用于测试HTTP,HTTPS,...

    android_external_okhttp

    &lt; artifactId&gt;okhttp&lt;/ artifactId&gt; &lt; version&gt;2.3.0&lt;/ version&gt; &lt;/ dependency&gt; 或Gradle: compile ' com.squareup.okhttp:okhttp:2.3.0 ' 中提供了开发版本 。 MockWebServer 用于测试HTTP,HTTPS,...

    avian-pack.android.external.okhttp:适用于 avian-pack 的 Android okhttp repo 克隆

    下载下载或通过 Maven 抓取: &lt; dependency&gt; &lt; groupId&gt;com.squareup.okhttp&lt;/ groupId&gt; &lt; artifactId&gt;okhttp&lt;/ artifactId&gt; &lt; version&gt;(insert latest version)&lt;/ version&gt;&lt;/ dependency&gt;建造OkHttp 需要 Java 7 来...

    PriorityOkHttp:支持优先级调度的OkHttp

    有关更多信息,请参见和 。下载下载或通过Maven获取: &lt;dependency&gt; &lt;groupId&gt;com.squareup.okhttp3&lt;/groupId&gt; &lt;artifactId&gt;okhttp&lt;/artifactId&gt; &lt;version&gt;3.0.1&lt;/version&gt;&lt;/dependency&gt;或Gradle: compile '...

    se.vuessr:VUE SSR基础服务框架 - VUE VUEX SSR NODE EXPRESS HTTP2 SPDY

    Initialization project a) vuessr init b) vuessr init &lt;GITHUB&gt; c) vuessr init &lt;GITHUB&gt; -n &lt;PROJECT&gt; d) vuessr init &lt;GITHUB&gt; -p &lt;PROJECT&gt; e) vuessr init &lt;GITHUB&gt; -n &lt;PROJECT&gt; -p &lt;PROJECT&gt;

    SPDY英文文档(HTTP2基础)

    SPDY 是 Google 开发的基于传输控制协议 (TCP) 的应用层协议 ,开发组正在推动 SPDY 成为正式标准(现为互联网草案)。SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性。

    支持SPDY的Web服务器KORE.zip

    KORE 是一个用 C 语言开发的支持 SPDY 的 Web 服务器。支持 Linux 和 BSD 系统。 特性: - Supports SNI - Supports SPDY/3 - Supports HTTP/1.1 - Secure by default - SSL connections only - Virtual host ...

    SPDY协议文档 (英文)

    SPDY协议文档英文版

    spdy, SPDY是一种旨在减少网页延迟的协议.zip

    spdy, SPDY是一种旨在减少网页延迟的协议 SPDYSPDY是一个实验协议,旨在减少网页的延迟。 SPDY v2草案是HTTPbis工作组领导的HTTP 2.0计划的基础。 在实验室测试中,SPDY显示页面加载时间减少 64% ! 有关详细信息,...

    Node.js-spdy-node.js中的SPDY服务器

    spdy - 用与内置的https模块相同的API创建SPDY服务器

    mod-spdy-beta_current_i386.rpm

    SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级...谷歌已经开发一个网络服务器原型机,以及支持SPDY协议的Chrome浏览器版本。 该文件是apache支持SPDY的扩展

    Firefox Beta 13.0 b7

    NEW When opening a new tab, users are now presented with their most visited pages NEW The default home page now has quicker access to bookmarks, history, ...The CSS turn &lt;angle&gt; unit is now supported

    SPDY

    NULL 博文链接:https://ssdutliuhaibo.iteye.com/blog/1396845

    HTTP SPDY客户端开发包okhttp.zip

    okhttp 是一个 Java 的 HTTP SPDY 客户端开发包,同时也支持 Android。 示例代码: OkHttpClient client = new OkHttpClient(); String get(URL url) throws IOException { HttpURLConnection connection = ...

    iSPDY:适用于OS X和iOS的SPDY客户端

    # import &lt; ispdy&gt; int main () { ISpdy* conn = [[ISpdy alloc ] init: kISpdyV3 host: @" voxer.com " port: 443 secure: YES ]; [conn connect ]; ISpdyRequest* req = [[ISpdyRequest alloc ] init: @" ...

    Chrome插件HTTP/2 and SPDY indicator

    Chrome插件HTTP/2 and SPDY indicator,安装完毕后访问启用HTTP2的站点,如果地址栏出现蓝色的闪电,说明站点已启用HTTP2.0

Global site tag (gtag.js) - Google Analytics