SPDY以及示例

SPDYGoogle開發的基於傳輸控制協議(TCP)的應用層協議 。Google最先是在Chromium中提出的SPDY協議[1]。目前已經被用於Google Chrome瀏覽器中來訪問Google的SSL加密服務。php

SPDY當前並非一個標準協議,但SPDY的開發組已經開始推進SPDY成爲正式標準(現爲互聯網草案[2]),Google Chrome[3]Mozilla FirefoxOperaInternet Explorer[4]均已支持SPDY協議。SPDY協議相似於HTTP,但旨在縮短網頁的加載時間和提升安全性。SPDY協議經過壓縮、多路複用和優先級來縮短加載時間[1]。SPDY並非首字母縮略字,而僅僅是"speedy"的縮寫。SPDY現爲Google的商標[5]node

設計

設計SPDY的目的在於下降網頁的加載時間[6]。經過優先級和多路複用,SPDY使得只須要創建一個TCP鏈接便可傳送網頁內容及圖片等資源[1][7]。SPDY中普遍應用了TLS加密,傳輸內容也均以gzipDEFLATE格式壓縮(與HTTP不一樣,HTTP的頭部並不會被壓縮)。另外,除了像HTTP的網頁服務器被動的等待瀏覽器發起請求外,SPDY的網頁服務器還能夠主動推送內容[8]linux

與HTTP的關係

SPDY並不用於取代HTTP,它只是修改了HTTP的請求與應答在網絡上傳輸的方式[1]; 這意味着只需增長一個SPDY傳輸層,現有的全部服務端應用均不用作任何修改。 當使用SPDY的方式傳輸,HTTP請求會被處理、標記簡化和壓縮。好比,每個SPDY端點會持續跟蹤每個在以前的請求中已經發送的HTTP報文頭 部,從而避免重複發送還未改變的頭部。而還未發送的報文的數據部分將在被壓縮後被髮送。git

瀏覽器支持

Google ChromeChromium已經支持SPDY[9][10].github

Mozilla Firefox自11.0開始內嵌支持SPDY,但默認並不使用[11][12]。從Firefox 13開始默認開啓對SPDY的支持[13]web

Opera從12.10開始支持SPDY.[14][15][16]chrome

IE將在IE11開始支持SPDY。[4]npm

以上來自維基百科  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下打開網絡請求,以下

 

 

相關文章
相關標籤/搜索