`

未来的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,...

    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,...

    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 '...

    RetrofitDemo

    public void onResponse(Call&lt;User&gt; call, Response&lt;User&gt; response) { // 处理成功响应 } @Override public void onFailure(Call&lt;User&gt; call, Throwable t) { // 处理失败情况 } }); ``` 6. **上传和下载**...

    SPDY英文文档(HTTP2基础)

    1. **多路复用**:在TCP之上,SPDY创建了一个帧层,允许在一个单一的TCP连接上同时处理多个并发请求和响应。这一设计解决了HTTP中的阻塞问题,减少了来回的网络延迟,因为不再需要为每个请求建立新的TCP连接。 2. *...

    SPDY

    在源码层面,学习SPDY可以加深对网络协议栈的理解,帮助开发者优化Web服务的性能。对于工具的使用,例如抓包工具Wireshark或浏览器开发者工具,都可以用来分析SPDY流量,帮助调试和诊断性能问题。 总的来说,SPDY...

    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;

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

    而SPDY(发音为 "speedy")是Google提出的一种网络协议,旨在提高网页加载速度,减少延迟,优化用户体验。它在HTTP的基础上进行了改进,尤其是对多路复用的支持,减少了TCP连接的数量。 **SPDY协议的特性** 1. **多...

    Android-对okhttp网络框架的进一步封装

    public void onResponse(Call&lt;ResponseBody&gt; call, Response&lt;ResponseBody&gt; response) { if (response.isSuccessful()) { // 处理成功响应 } else { // 处理错误码 } } @Override public void onFailure...

    okhttp jar依赖

    &lt;artifactId&gt;okhttp&lt;/artifactId&gt; &lt;version&gt;最新版本号&lt;/version&gt; &lt;/dependency&gt; ``` 这里的“最新版本号”需要替换为OkHttp当前的稳定版本号。 2. **简单使用**: OkHttp 提供了简洁的API来发送HTTP请求。...

    SPDY协议文档 (英文)

    SPDY协议的核心特性之一就是帧化技术,它允许将多个独立的数据流组合在一个TCP连接中传输,有效地减少了网络延迟。 - **Control Frames(控制帧)** 控制帧负责管理会话和流的状态,例如建立新流(SYN_STREAM)、...

    支持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 ...

    Apache2.4(alston修改版)

    - **配置改进**:配置语法有所简化,新的`&lt;If&gt;`和`&lt;Directory&gt;`指令使得条件配置更为灵活。 2. **配置与管理** - **配置文件**:主要配置文件为`httpd.conf`,其中包含服务器全局设置,也可以通过`Include`指令...

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

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

    mod-spdy-beta_current_i386.rpm

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

Global site tag (gtag.js) - Google Analytics