SPDY 协议简介及如何编译含有 SPDY 的 NGINX

本贴最后更新于 3817 天前,其中的信息可能已经斗转星移

SPDY 是 Google 开发的基于传输控制协议(TCP)的应用层协议 (发音同“speedy”),以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY 并不是一种用于替代 HTTP 的协议,而是对 HTTP 协议 的增强。新协议的功能包括数据流的多路复用、请求优先级,以及 HTTP 包头压缩。谷歌表示,引入 SPDY 协议后,在实验室测试中页面加载速度比原先快 64%。

目前主流浏览器 Google Chrome Mozilla Firefox Opera Internet Explorer 都已经支持了 SPDY,主流 web 服务器 Apache、Nginx、Netty、Jetty、node.js 等都已经开始初步的支持 SPDY 基本已经支持 SPDY,SPDY 当前并不是一个标准协议,但 SPDY 的开发组已经开始推动 SPDY 成为正式标准。

本文主要了解 SPDY 的基本概念,以及如何编译一个含有 SPDY 的 nginx。

HTTP 协议存性能上的一些问题

一个连接一个请求。浏览器和 web server 之间都是以短连接方式交互,一个连接只服务一次请求,对于一个需要加载多个资源的页面来说,将会带来很高的延迟。

只能由客户端发起请求。服务器不能主动的将一些必须的资源推送给客户端。

HTTP 协议只能对 body 进行压缩处理,不能压缩 header。在一个 cookie 较多的站点,将对带宽造成严重的浪费。

冗余的头部。一些头部在同一个通道中通过请求在重复的发送。像 User-Agent Host Accept* 常常是固定不变的,所以不需要重复发送

可选的压缩。HTTP 使用可选的压缩编码。但是内容应该总是使用压缩格式。

SPDY 的目标

1.SPDY 为 WEB 定义和实现了一个应用层的协议来大大降低延迟。SPDY 的高层次目标是:

2.减少 50% 的网页加载时间。我们的成果已经初步接近这个目标(见下面解释)。

3.最小化部署复杂性。SPDY 使用 TCP 作为相关的传输层,所以现存的网络基础设施,不需要改变。

4.避免网站开发者需要对网站作出任何改变。支持 SPDY 唯一需要的改变在用户 user agent 和 web server。

5.聚集有兴趣探索协议来解决延迟问题的志同道合的开发者。我们希望和开源社区 行业专家一起来开发这个新的协议。

一些具体的技术目标:

1.单个 tcp 连接支持并发的 HTTP 请求

2.压缩头部和去掉不必要的头部,来减少当前 HTTP 使用的带宽

3.定义一个容易实现,在服务器端高效率的协议。我们希望通过减少边缘情况 定义易解析的消息格式来减少 HTTP 的复杂性

4.让 SSL 协议在现存的网络基础设施下有更好的安全性和兼容性。虽然 SSL 确实引入了延迟,我们认为网络的长远发展依赖一个安全的网络连接。另外,使用 SSL 来确保整个通信不中断是必要的。

SPDY 设计和特征

在 SSL 层上加了一个 SPDY session 层,来实现并发和 stream 机制。

通常的 HTTP GET 和 POST 格式仍然是一样的;然而 SPDY 为编码和传输设计了一个新的帧格式。

基本特征

复用流 SPDY 允许在一个连接上无限制的并发流。因为请求在一个通道上,TCP 效率更高:更少的网络连接,更少更密集的数据包被发出

请求优先级 虽然无数的并行数据流解决了序列化问题,但他们引入了另外的问题

HTTP 头部压缩

高级特征

此外,SPDY 提供了高级特征,服务器启动流。服务器启动流能用来分发内容到客户端,而不需要客户端请求它。这个选项可以由 web 开发人员通过如下两种方法配置:

Server push SPDY 通过 X-Associated-Content 头试验了服务器推送数据给客户端的选项。这个头告诉客户端服务器将在客户端请求资源之前,推送资源给它。对于初始页面下载(例如用户初次访问这个网站),这样能大大提升用户体验

Server hint 相对于自动的推送资源到客户端,服务器使用 X-Subresources 头去建议客户端,来请求特殊的资源,这是在服务器事先知道客户的这些资源将被需要 的情况下。但是,服务器仍然在发送内容前等待客户请求。通过慢速链接,这个选项能减少一个客户端发现它需要的资源数百毫秒的时间,并可能对非初始页面加载 会更好。

SPDY 实现

下面是已经实现的:

一个能同时提供 HTTP SPDY 服务的高速 全内存的服务程序。我们将在不久的将来开源这些代码

一个能使用 HTTP 或者 SPDY 的 chrome 浏览器。

一个测试和基准设施,来确保页面是不变的。

NGINX SPDY 编译

http://nginx.org/patches/attic/spdy/README.txt

Nginx 支持 SPDY draft 2

Nginx 从 1.3.15 开始支持

需要 OpenSSL 1.01+

目前已知的问题和限制:

不支持 server push

不支持 SPDY 连接速率限制

如何编译含 SPDY 的 nginx?

1.安装 OpenSSL 1.0.1+

2.下载 nginx 1.3.x 以上的版本

3.解压 nginx

4.下载应用 SPDY module patch

wget http://nginx.org/patches/spdy/patch.spdy.txt

patch -p1 < patch.spdy.txt

5.配置

./configure --with-http_ssl_module --with-http_spdy_module

6.编译

Make

配置

server {
    listen 443 ssl spdy default_server;
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    ...
}

下一步会主要学习 SPDY 草案的内容,以及阅读代码。

转自链接:http://network.51cto.com/art/201401/426957.htm

【编辑推荐】

Facebook 宣布支持谷歌 SPDY 协议:欲取代 HTTP

为高负载网络优化 Nginx 和 Node.js 方法

HTTP 代理与 SPDY 协议

手动同步自: http://vanessa.b3log.org/SPDY-Nginx

  • Browser
    1 引用
  • 性能
    62 引用 • 180 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • SPDY
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
Vanessa
我们终此一生,就是要摆脱他人的期待,找到真正的自己。

推荐标签 标签

  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 276 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 88 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 429 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 607 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 566 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 48 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 29 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 1 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 441 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 65 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 330 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    41 引用 • 40 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7017 引用 • 31714 回帖 • 220 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 363 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    923 引用 • 936 回帖
  • danl
    92 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 400 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    16 引用 • 7 回帖 • 2 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 194 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 648 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 237 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 688 关注