testing/xpcshell/node-spdy/README.md

Wed, 31 Dec 2014 06:55:46 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:46 +0100
changeset 1
ca08bd8f51b2
permissions
-rw-r--r--

Added tag TORBROWSER_REPLICA for changeset 6474c204b198

     1 # SPDY Server for node.js [![Build Status](https://secure.travis-ci.org/indutny/node-spdy.png)](http://travis-ci.org/indutny/node-spdy)
     3 <a href="http://flattr.com/thing/758213/indutnynode-spdy-on-GitHub" target="_blank">
     4 <img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a>
     6 With this module you can create [SPDY](http://www.chromium.org/spdy) servers
     7 in node.js with natural http module interface and fallback to regular https
     8 (for browsers that doesn't support SPDY yet).
    10 ## Usage
    12 ```javascript
    13 var spdy = require('spdy'),
    14     fs = require('fs');
    16 var options = {
    17   key: fs.readFileSync(__dirname + '/keys/spdy-key.pem'),
    18   cert: fs.readFileSync(__dirname + '/keys/spdy-cert.pem'),
    19   ca: fs.readFileSync(__dirname + '/keys/spdy-csr.pem'),
    21   // SPDY-specific options
    22   windowSize: 1024, // Server's window size
    23 };
    25 var server = spdy.createServer(options, function(req, res) {
    26   res.writeHead(200);
    27   res.end('hello world!');
    28 });
    30 server.listen(443);
    31 ```
    33 And by popular demand - usage with
    34 [express](https://github.com/visionmedia/express):
    36 ```javascript
    37 var spdy = require('spdy'),
    38     express = require('express'),
    39     fs = require('fs');
    41 var options = { /* the same as above */ };
    43 var app = express();
    45 app.use(/* your favorite middleware */);
    47 var server = spdy.createServer(options, app);
    49 server.listen(443);
    50 ```
    52 ## API
    54 API is compatible with `http` and `https` module, but you can use another
    55 function as base class for SPDYServer.
    57 ```javascript
    58 spdy.createServer(
    59   [base class constructor, i.e. https.Server],
    60   { /* keys and options */ }, // <- the only one required argument
    61   [request listener]
    62 ).listen([port], [host], [callback]);
    63 ```
    65 Request listener will receive two arguments: `request` and `response`. They're
    66 both instances of `http`'s `IncomingMessage` and `OutgoingMessage`. But three
    67 custom properties are added to both of them: `streamID`, `isSpdy`,
    68 `spdyVersion`. The first one indicates on which spdy stream are sitting request
    69 and response. Second is always true and can be checked to ensure that incoming
    70 request wasn't received by HTTPS fallback and last one is a number representing
    71 used SPDY protocol version (2 or 3 for now).
    73 ### Push streams
    75 It is possible to initiate 'push' streams to send content to clients _before_
    76 the client requests it.
    78 ```javascript
    79 spdy.createServer(options, function(req, res) {
    80   var headers = { 'content-type': 'application/javascript' };
    81   res.push('/main.js', headers, function(err, stream) {
    82     if (err) return;
    84     stream.end('alert("hello from push stream!");');
    85   });
    87   res.end('<script src="/main.js"></script>');
    88 }).listen(443);
    89 ```
    91 Push is accomplished via the `push()` method invoked on the current response
    92 object (this works for express.js response objects as well).  The format of the
    93 `push()` method is:
    95 `.push('full or relative url', { ... headers ... }, optional priority, callback)`
    97 You can use either full ( `http://host/path` ) or relative ( `/path` ) urls with
    98 `.push()`. `headers` are the same as for regular response object. `callback`
    99 will receive two arguments: `err` (if any error is happened) and `stream`
   100 (stream object have API compatible with a
   101 [net.Socket](http://nodejs.org/docs/latest/api/net.html#net.Socket) ).
   103 ### Options
   105 All options supported by
   106 [tls](http://nodejs.org/docs/latest/api/tls.html#tls.createServer) are working
   107 with node-spdy. In addition, `maxStreams` options is available. it allows you
   108 controlling [maximum concurrent streams][http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2#TOC-SETTINGS]
   109 protocol option (if client will start more streams than that limit, RST_STREAM
   110 will be sent for each additional stream).
   112 Additional options:
   114 * `plain` - if defined, server will accept only plain (non-encrypted)
   115   connections.
   117 #### Contributors
   119 * [Fedor Indutny](https://github.com/indutny)
   120 * [Chris Strom](https://github.com/eee-c)
   121 * [François de Metz](https://github.com/francois2metz)
   122 * [Ilya Grigorik](https://github.com/igrigorik)
   123 * [Roberto Peon](https://github.com/grmocg)
   124 * [Tatsuhiro Tsujikawa](https://github.com/tatsuhiro-t)
   125 * [Jesse Cravens](https://github.com/jessecravens)
   127 #### LICENSE
   129 This software is licensed under the MIT License.
   131 Copyright Fedor Indutny, 2012.
   133 Permission is hereby granted, free of charge, to any person obtaining a
   134 copy of this software and associated documentation files (the
   135 "Software"), to deal in the Software without restriction, including
   136 without limitation the rights to use, copy, modify, merge, publish,
   137 distribute, sublicense, and/or sell copies of the Software, and to permit
   138 persons to whom the Software is furnished to do so, subject to the
   139 following conditions:
   141 The above copyright notice and this permission notice shall be included
   142 in all copies or substantial portions of the Software.
   144 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   145 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   146 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
   147 NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
   148 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
   149 OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
   150 USE OR OTHER DEALINGS IN THE SOFTWARE.

mercurial