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下打開網絡請求,以下