`
kavy
  • 浏览: 864651 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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://blog.csdn.net/liujiyong7/article/details/17953979

分享到:
评论

相关推荐

    为Nginx添加SPDY功能

    所以,我也开始尝试着给自己的论坛加上SPDY协议,WEB服务器本人选择的是nginx,在过去,Nginx并没有内置SPDY协议,需要打开的话还要下载开发版然后手动编译,很不方便。喜闻乐见的是,最近Nginx发布了1.6稳定版,这...

    Nginx(Tengine)启用 SPDY 支持的配置方法

    虽然SPDY当前还并不是一个标准协议,但是Google Chrome,Chromium,Mozilla Firefox,Opera,IE11均已支持SPDY协议.SPDY可以缩短网页的加载时间,让你们网页更快的展现在用户面前,仅从这个方面来说,就有部署SPDY的必要. ...

    堆溢出攻击教程(heap overflow attack)

    堆溢出攻击教程(heap overflow attack)

    Nginx v1.6.0 稳定版.zip

    Nginx 1.6.0 稳定版发布,该版本包含很多来自 1.5.x 的新特性,包括各种 SSL 的提升、SPDY 3.1 支持、根据请求条件对缓存重新验证、认证请求模块等等。 SEnginx主线版本1.6.0发布,主要变更如下: Changes with ...

    nginx-proxy:通过Docker实施SPDY代理NGINX和Ansible配方以部署Apache2网站

    Nginx,反向代理,SPDY等... 很多时候,您面临着另一个时代的Web服务器(Apache更不用说了)。 我建议您向您介绍 , 和NGINX:我们将在容器中设置Nginx反向代理,该代理将负责代理将在部署的Apache上运行的站点。 ...

    Nginx/Openresty中启用http2支持的方法教程

    当下很多著名的互联网公司,例如百度、淘宝、UPYUN 都在自己的网站或 APP 中采用了 SPDY 系列协议(当前最新版本是 SPDY/3.1),因为它对性能的提升是显而易见的。主流的浏览器(谷歌、火狐、Opera)也都早已经支持 ...

    static-nginx

    在 docker 中编译一个静态链接的 nginx 使用 docker 容器编译生产就绪的静态链接 nginx 的脚本。 生成的二进制文件在 bintray 上可用,非常适合包含在小型(例如,基于busybox 的)docker 容器中。 二进制文件包括...

    heroku-nginx-pagespeed:用于服务静态网站的 Heroku Buildpack (Nginx + Google Pagespeed)

    Nginx 1.9.0 带 SPDY 谷歌页面速度 1.9.32.3 Heroku 要求: 雪松-14 用法: 我们使用这个堆栈来为使用 AngularJS 构建的静态网站提供服务。 按原样使用 Buildpack 只需将以下内容添加到您的应用程序配置变量...

    百度贴吧签到网站源码Java-blog-nginx:博客-nginx

    nginx 参考资料 网上最全面nginx教程(近100篇文章整理) nginx安装 1、必要软件准备 安装pcre 为了支持rewrite功能,我们需要安装pcre # yum install pcre* //如过你已经装了,请跳过这一步 安装openssl 需要ssl的...

    docker-nginx-extras:带有nginx-extras软件包的Docker映像

    Nginx Web /代理服务器(扩展版) Nginx(“引擎X”)是由Igor Sysoev创建的高性能Web和反向代理服务器。 它既可以用作独立的Web服务器,也可以用作代理,以减少后端HTTP或邮件服务器上的负载。 该软件包提供了带有...

    high-performance-nginx-tls-tuning:高性能Nginx TLS调优

    简介 这篇文章中,我们先介绍Nginx中的TLS设置有什么与请求延迟可能相关,如何调整才能实现加速。然后我们用优化Nginx服务器的实例来分享如何调整Nginx TLS / SSL设置,为首次搜索的用户提速30%左右。我们会详细...

    canvas-lms-cloud:在从简单的本地虚拟机实例到水平扩展、容错、负载平衡的私有云的所有内容上自动配置、部署和托管开源 Canvas LMS

    Nginx 用作 SSL 终结器、静态缓存、循环负载均衡器,支持 SPDY 协议 利用 Redis 提高系统性能 利用 Cassandra 提高系统性能 处理多个物理数据中心设置 使用循环负载平衡处理多个应用程序主机 处理关系数据库集群...

    proxrox:代理服务,结合来源,在开发过程中使用SSI等

    在开发过程中,避免SOP问题,结合来源,代理服务,使用SSL,SPDY,SSI等…! | | | Proxrox是一个命令行实用程序,它可以启动本地Nginx实例来提供静态文件,在单个来源下代理一个或多个服务,在本地使用SSL,并且...

    C 的HTTP库Proxygen.zip

    支持 HTTP/1.1、SPDY 3 和 SPDY 3.1,同时也开始在为 HTTP/2 做开发。Proxygen 并非为了替换 Apache 或者 Nginx,该项目主要是侧重于用 C 语言构建超级灵活的 HTTP 服务器,提供非常好的性能和灵活的配置。此外也是...

    ShadowShorten

    怎么跑使用一些额外的模块安装openresty:-- --with-http_spdy_module --with-http_sub_module --with-http_geoip_module 安装一些额外的lua库(并在主nginx.conf设置正确的lua_package_path ): 添加geoip_country...

    basebuntu:用于配置 Ubuntu LTS Web 服务器的 Bash 脚本

    Nginx(支持 https/SPDY 的网络服务器) Pagespeed(用于减少页面加载时间的 Ngnix 模块) PHP-FPM(替代 mod_php) UFW(防火墙) MariaDB(数据库) 使用 RVM 的 Ruby 环境 便于管理的命令 用于处理网站配置...

    wp-stack:Docker 的最小 WordPress 堆栈

    特征NGINX + PHP-FPM SSL/SPDY 支持Web 应用程序防火墙 (WAF) WP-CLI 命令行工具Amazon S3 备份(很快) 导入/导出站点(很快)使用 Docker 部署创建数据库docker run --name mariadb \-e MYSQL_ROOT_PASSWORD= " ...

    neocities-proxy:Neocities 站点的代理服务器

    基于 node-spdy 和随机其他奇特事物的 Neocities 缓存代理服务器的开始。 repo 中的证书是自签名的,例如 example.org,NICE TRY DADE MURPHY。 我们开始推动 Nginx 超越它的能力,所以作为一个选项开始变得更有...

Global site tag (gtag.js) - Google Analytics