Sym - 一个用 Java 实现的现代化社区平台 • 源码 • 注册

Pipe - 小而美的开源博客平台 • 体验 • 皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载 
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

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

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

【编辑推荐】


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步