• SPDY以及示例


    SPDYGoogle开发的基于传输控制协议(TCP)的应用层协议 。Google最早是在Chromium中提出的SPDY协议[1]。目前已经被用于Google Chrome浏览器中来访问Google的SSL加密服务。

    SPDY当前并不是一个标准协议,但SPDY的开发组已经开始推动SPDY成为正式标准(现为互联网草案[2]),Google Chrome[3]Mozilla FirefoxOperaInternet Explorer[4]均已支持SPDY协议。SPDY协议类似于HTTP,但旨在缩短网页的加载时间和提高安全性。SPDY协议通过压缩、多路复用和优先级来缩短加载时间[1]。SPDY并不是首字母缩略字,而仅仅是"speedy"的缩写。SPDY现为Google的商标[5]

    设计

    设计SPDY的目的在于降低网页的加载时间[6]。通过优先级和多路复用,SPDY使得只需要建立一个TCP连接即可传送网页内容及图片等资源[1][7]。SPDY中广泛应用了TLS加密,传输内容也均以gzipDEFLATE格式压缩(与HTTP不同,HTTP的头部并不会被压缩)。另外,除了像HTTP的网页服务器被动的等待浏览器发起请求外,SPDY的网页服务器还可以主动推送内容[8]

    与HTTP的关系

    SPDY并不用于取代HTTP,它只是修改了HTTP的请求与应答在网络上传输的方式[1]; 这意味着只需增加一个SPDY传输层,现有的所有服务端应用均不用做任何修改。 当使用SPDY的方式传输,HTTP请求会被处理、标记简化和压缩。比如,每一个SPDY端点会持续跟踪每一个在之前的请求中已经发送的HTTP报文头 部,从而避免重复发送还未改变的头部。而还未发送的报文的数据部分将在被压缩后被发送。

    浏览器支持

    Google ChromeChromium已经支持SPDY[9][10].

    Mozilla Firefox自11.0开始内嵌支持SPDY,但默认并不使用[11][12]。从Firefox 13开始默认开启对SPDY的支持[13]

    Opera从12.10开始支持SPDY.[14][15][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下打开网络请求,如下

     

  • 相关阅读:
    8051单片机指令和寻址方式
    C/C++的关系
    go JSON 读写到文件
    Oracle 对未提交事务的查询
    win8 iis 安装
    Silverlight 项目 对话框
    VisualSVN错误 Cannot query proxy blanket解决办法
    silverlight浏览器自适应问题
    windows server2003 多用户登陆问题解决办法
    silverlight 缺少对象错误
  • 原文地址:https://www.cnblogs.com/sniper007/p/3370901.html
Copyright © 2020-2023  润新知