SPDY是Google开发的基于传输控制协议(TCP)的应用层协议 。Google最早是在Chromium中提出的SPDY协议Google Chrome浏览器中来访问Google的SSL加密服务。
SPDY当前并不是一个标准协议,但SPDY的开发组已经开始推动SPDY成为正式标准(现为互联网草案[5]。
设计
设计SPDY的目的在于降低网页的加载时间[8]。
与HTTP的关系
SPDY并不用于取代HTTP,它只是修改了HTTP的请求与应答在网络上传输的方式[1]; 这意味着只需增加一个SPDY传输层,现有的所有服务端应用均不用做任何修改。 当使用SPDY的方式传输,HTTP请求会被处理、标记简化和压缩。比如,每一个SPDY端点会持续跟踪每一个在之前的请求中已经发送的HTTP报文头 部,从而避免重复发送还未改变的头部。而还未发送的报文的数据部分将在被压缩后被发送。
浏览器支持
Google Chrome和Chromium已经支持SPDY[10].
Mozilla Firefox自11.0开始内嵌支持SPDY,但默认并不使用[13]。
Opera从12.10开始支持SPDY.[16]
IE将在IE11开始支持SPDY。[4]
以上来自维基百科 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下打开网络请求,如下