smart | Webentwicklung
Alles rund um HTML5, PHP, WordPress & Co.

node.js: SPDY-Server unter Windows einrichten

11. April 2013
Stephan
node.js: SPDY-Server unter Windows einrichten

Da ich die Entwicklung im Bereich SPDY sehr interessant finde, habe ich gestern mal testweise versucht einen SPDY-Server lokal unter Windows zum Laufen zu bekommen.

Eigentlich wollte ich als Webserver Apache nutzen, aber das entsprechende Modul mod_spdy ist für Windows derzeit nicht verfügbar.

Also habe ich mal geschaut, was es denn für Alternativen gibt und bin dann auf nginx und node.js gestoßen. Weder mit nginx noch mit node.js habe ich bisher viel gearbeitet. Entschieden habe ich mich letztendlich für letzteres, weil ich node.js sowieso schon wegen CoffeeScript installiert hatte.

Bei SPDY handelt es sich vereinfacht betrachtet um ein von Google entwickeltes Protokoll, dass das Hauptziel verfolgt, die Nachteile von HTTP anzugehen und die Ladezeit von Websites zu beschleunigen.

Installation von node.js

Bevor wir das SPDY-Server-Paket installieren können, benötigen wir als erstes einmal node.js. Für Windows gibt es einen Windows-Installer mittels dem die Installation ohne Probleme und große Konfiguration vonstatten geht.

Installation des SPDY-Server-Pakets

Anschließend müssen wir uns mittels dem Node Package Manager (NPM), welcher bei der Installation von node.js mitinstalliert wurde, das SPDY-Server-Paket herunterladen und installieren.

Vorher legen wir aber noch ein Projektverzeichnis an. Ich habe es z.B. spdy-test genannt. Öffnet nun eure Windows-Konsole und wechselt in das erstellte Verzeichnis und tippt folgende Zeile ein:

npm install spdy

Nun müsste in eurem angelegten Projektverzeichnis ein neues Verzeichnis namens node_modules zu finden sein. Innerhalb dessen wiederum, sollte sich nun das SPDY-Server-Paket befinden.

Eigenes SSL-Zertifikat erstellen

Für den Einsatz von SPDY benötigen wir ein SSL-Zertifikat. Für Testzwecke lässt sich mittels OpenSSL ein eigenes SSL-Zertifikat erstellen. Dazu müsst ihr das angesprochene OpenSSL auf eurem Rechner installiert haben.

Wer lokal bereits Apache installiert hat, findet im Pfad/zu/Apache/bin-Verzeichnis OpenSSL.

Erzeugt in eurem Projektverzeichnis ein Verzeichnis mit dem names keys. In eurer Windows-Konsole gebt ihr nun die folgenden Befehle ein:

openssl req -config d:\Apache2.2\conf\openssl.cnf -new -out g:\spdy-test\keys\server.csr -keyout g:\spdy-test\keys\server.pem
openssl rsa -in g:\spdy-test\keys\server.pem -out g:\spdy-test\keys\server.key
openssl x509 -in g:\spdy-test\keys\server.csr -out g:\spdy-test\keys\server.crt -req -signkey g:\spdy-test\keys\server.key -days 365

Die Pfade müsst ihr entsprechend anpassen.

Das Verzeichnis keys in eurem Projektverzeichnis sollte jetzt die folgenden Dateien enthalten:

  • server.crt
  • server.csr
  • server.key
  • server.pem

SPDY-Server implementieren

Legt nun eine Datei namens spdy-server.js in eurem Projekverzeichnis an und fügt folgenden Code ein:

var fs = require('fs');
var spdy = require('spdy');

var indexFile = fs.readFileSync('index.html');

var serverOptions = 
{
    key: fs.readFileSync('keys/server.key'),
    cert: fs.readFileSync('keys/server.crt'),
    ca: fs.readFileSync('keys/server.csr')
};

var server = spdy.createServer(serverOptions, function(request, response) 
{
    var headers = {};
    var body;
    var status = 200;

    switch(request.url)
    {
        case '/':
            headers['Content-Type'] = 'text/html';
            body = indexhtml
            break;
        default:
            body = '';
            status = 404;
    }

    headers['Content-Length'] = body.length;
    response.writeHead(status, headers);
    response.end(body);
});

server.listen(8081, function()
{
    console.log('SPDY Server gestartet - https://localhost:8081');
});

Im Folgenden eine kurze Erklärung des Codes:

Zeile 1 – 2
Einbinden der benötigten node.js Pakete bzw. Module.

Zeile 4
Hier wird die index.html-Datei geladen.

Zeile 6 – 11
Anlegen der Variable serverOptions, welche die Pfade zu den benötigten SSL-Zertifikat-Dateien enthält.

Zeile 13 – 33
Hier implementieren wir die bereitgestellte SPDY-Server-API und geben an, wie wir auf bestimmte Anfragen reagieren bzw. basteln die Antwort zusammen.

Zeile 35 – 38
Angabe, dass der Server auf Port 8081 läuft und in der Konsole ausgegeben werden soll, dass er gestartet wurde.

HTML-Seite erstellen

Ebenso benötigen wir für unseren Test noch eine index.html, die wie folgt aussehen könnte:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta charset="utf-8" />
<title>node.js: SPDY-Server</title>
</head>
<body>
SPDY-Server läuft!
</body>
</html>

SPDY-Server starten

Um den SPDY-Server zu starten, müsst ihr in eure Konsole nur folgenden Befehl eingeben:

node spdy-server

In eurem Webbrowser könnt ihr nun https://localhost:8081 aufrufen und nun solltet ihr die Index-Seite angezeigt bekommen.

Prüfen, ob Browser SPDY zur Übertragung verwendet

Auch wenn ihr die Seite aufrufen konntet, bedeutet das noch nicht unbedingt, dass die Seite auch mittels SPDY übertragen wurde. Für Firefox gibt es hierfür z.B. das Add-On SPDY Indicator, der euch in der Adresszeile anzeigt, ob SPDY aktiv ist oder nicht:

Firefox Add-On: SPDY Indicator

Hierdurch werdet ihr feststellen können, dass z.B. neben Google auch Twitter bereits auf SPDY setzt und es zur Übertragung verwendet.

Außerdem könnt ihr mittels Firebug den Header der Index-Seite anschauen und gucken, ob das Header-Feld X-Firefox-Spdy gesetzt ist:

Firefox: SPDY Header-Feld in Firebug

Fazit

Mithilfe von node.js und dem entsprechenden SPDY-Server-Paket könnt ihr ganz einfach einen SPDY-Server zum Laufen bringen. Ich werde die nächsten Tage mich mal ein wenig mit SPDY auseinandersetzen und z.B. das Feature Server Push testen.

Was haltet ihr von SPDY? Habt ihr damit schon näher befasst und es bereits getestet?

Kommentare  
0 Kommentare vorhanden
0 Trackbacks/Pingbacks vorhanden
Du bist herzlich eingeladen auch ein Kommentar zu hinterlassen!
Kommentar schreiben

Vielen Dank für dein Kommentar!