SPDY是Google开发的基于传输控制协议(TCP)的应用层协议 。Google最先是在Chromium中提出的SPDY协议[1]。目前已经被用于Google Chrome浏览器中来访问Google的SSL加密服务。php
SPDY当前并非一个标准协议,但SPDY的开发组已经开始推进SPDY成为正式标准(现为互联网草案[2]),Google Chrome[3],Mozilla Firefox,Opera和Internet Explorer[4]均已支持SPDY协议。SPDY协议相似于HTTP,但旨在缩短网页的加载时间和提升安全性。SPDY协议经过压缩、多路复用和优先级来缩短加载时间[1]。SPDY并非首字母缩略字,而仅仅是"speedy"的缩写。SPDY现为Google的商标[5]。node
设计SPDY的目的在于下降网页的加载时间[6]。经过优先级和多路复用,SPDY使得只须要创建一个TCP链接便可传送网页内容及图片等资源[1][7]。SPDY中普遍应用了TLS加密,传输内容也均以gzip或DEFLATE格式压缩(与HTTP不一样,HTTP的头部并不会被压缩)。另外,除了像HTTP的网页服务器被动的等待浏览器发起请求外,SPDY的网页服务器还能够主动推送内容[8]。linux
SPDY并不用于取代HTTP,它只是修改了HTTP的请求与应答在网络上传输的方式[1]; 这意味着只需增长一个SPDY传输层,现有的全部服务端应用均不用作任何修改。 当使用SPDY的方式传输,HTTP请求会被处理、标记简化和压缩。好比,每个SPDY端点会持续跟踪每个在以前的请求中已经发送的HTTP报文头 部,从而避免重复发送还未改变的头部。而还未发送的报文的数据部分将在被压缩后被发送。git
Google Chrome和Chromium已经支持SPDY[9][10].github
Mozilla Firefox自11.0开始内嵌支持SPDY,但默认并不使用[11][12]。从Firefox 13开始默认开启对SPDY的支持[13]。web
Opera从12.10开始支持SPDY.[14][15][16]chrome
以上来自维基百科 http://zh.wikipedia.org/wiki/SPDY浏览器
DEMO安全
如下是DEMO页面
服务基于nodejs
nodejs 安装命令:
npm install spdy
github 地址: https://github.com/indutny/node-spdy
下载github包,而后解压,example里面有hello_world,我把app.js修改了下
以下
1 var fs = require('fs'), 2 spdy = require('../../'); 3 var Buffer = require('buffer').Buffer; 4 5 var options = { 6 key: fs.readFileSync('keys/spdy-key.pem'), 7 cert: fs.readFileSync('keys/spdy-cert.pem'), 8 ca: fs.readFileSync('keys/spdy-csr.pem') 9 }; 10 11 var big = new Buffer(16 * 1024); 12 for (var i = 0; i < big.length; i++) { 13 big[i] = '0'.charCodeAt(0) + (i % 10); 14 } 15 16 var server = spdy.createServer(options, function(req, res) { 17 if (req.url !== '/') { 18 res.writeHead(404); 19 res.end(); 20 return; 21 } 22 23 res.push('/' + Math.random() + '.txt', { 24 'Content-Type': 'text/plain' 25 }, function(err, stream) { 26 console.log('Push start'); 27 if (err) 28 return console.error(err); 29 stream.on('error', function(err) { 30 console.error('Push error', err); 31 }); 32 stream.write(big, function() { 33 console.error('Push done'); 34 }); 35 stream.end(); 36 }); 37 res.writeHead(200, { 38 "Content-Type": "text/plain" 39 }); 40 res.end('ok good'); 41 }); 42 43 server.listen(3232, function() { 44 var addr = this.address(); 45 console.log('Server is listening on %s:%d', 'localhost', addr.port); 46 });
运行 浏览器敲入 https://localhost:3232/
firefox下打开网络请求,以下