Erweiterte Header für Express.js konfigurieren
Schritt-für-Schritt: Origin-Agent-Cluster via Middleware, HTTPS-Redirect mit x-forwarded-proto-Check, WWW-Normalisierung und X-Powered-By entfernen.
Erweiterte Header in Express.js
Express.js setzt HTTP-Header über Middleware-Funktionen. Alle Middlewares werden mit app.use() global registriert und in Registrierungsreihenfolge ausgeführt. Die Reihenfolge ist bei HTTPS- und WWW-Redirects entscheidend — Redirect-Middlewares müssen als erste registriert werden.
Erweiterte Header bringen zusammen 4 von 166 Punkten im Wolf-Agents Web Security Check. Diese Anleitung zeigt drei Schritte: Origin-Agent-Cluster via Middleware, HTTPS-Redirect mit korrekter Proxy-Erkennung und WWW-Normalisierung mit Hostname-Check.
Origin-Agent-Cluster via Middleware setzen
In Express.js werden HTTP-Header mit res.setHeader() gesetzt. Eine globale Middleware mit app.use() sorgt dafür, dass der Header bei jeder Antwort gesetzt wird. Gleichzeitig deaktivieren Sie X-Powered-By mit app.disable("x-powered-by").
// app.js oder server.js
const express = require('express');
const app = express();
// X-Powered-By Header entfernen (Express default)
app.disable('x-powered-by');
// Trust Proxy — nötig wenn hinter Nginx/Load Balancer
app.set('trust proxy', 1);
// Origin-Agent-Cluster Middleware — vor allen Routen registrieren
app.use((req, res, next) => {
res.setHeader('Origin-Agent-Cluster', '?1');
next();
}); Das Paket helmet setzt viele Security-Header auf einmal: app.use(helmet()). Neuere Helmet-Versionen (ab 6.x) setzen Origin-Agent-Cluster standardmäßig. Prüfen Sie die Defaults — manche Helmet-Header benötigen Anpassung für Ihre Anwendung.
HTTPS-Redirect konfigurieren
Express läuft in Produktionsumgebungen meistens hinter einem Reverse Proxy (Nginx, Load Balancer). Dieser terminiert HTTPS — Express sieht nur HTTP-Verbindungen. Die Middleware prüft daher sowohl req.secure als auch den X-Forwarded-Proto-Header.
// HTTPS-Redirect Middleware
// Prüft req.secure UND x-forwarded-proto (für Reverse-Proxy-Setups)
const enforceHttps = (req, res, next) => {
const isSecure =
req.secure ||
req.headers['x-forwarded-proto'] === 'https';
if (!isSecure && process.env.NODE_ENV === 'production') {
// 301: Permanent — Browser cached diesen Redirect
return res.redirect(301, `https://${req.headers.host}${req.url}`);
}
next();
};
// Als erstes registrieren (vor allen anderen Middlewares)
app.use(enforceHttps); NODE_ENV === 'production' begrenzen — lokal mit HTTP zu entwickeln ist praktischer. In der Produktion immer erzwingen. WWW-Normalisierung und veraltete Header entfernen
Der Hostname in req.hostname enthält die Domain ohne Port. Mit startsWith("www.") prüfen und mit slice(4) das www-Präfix entfernen. Der Redirect leitet auf die HTTPS-non-www-URL weiter.
// WWW-Normalisierung Middleware
const removeWww = (req, res, next) => {
const host = req.hostname;
if (host.startsWith('www.')) {
const newHost = host.slice(4); // www. entfernen
return res.redirect(301, `https://${newHost}${req.url}`);
}
next();
};
app.use(removeWww);
// Vollständige Middleware-Reihenfolge:
// 1. enforceHttps → HTTP → HTTPS
// 2. removeWww → www → non-www
// 3. Security-Header Middleware (Origin-Agent-Cluster etc.)
// 4. Weitere App-Middlewares (body-parser, session, etc.)
// 5. Routes // Vollständiges Security-Header Setup für Express.js (Production)
const express = require('express');
const app = express();
app.disable('x-powered-by');
app.set('trust proxy', 1);
// Alle Security-Header in einer Middleware
app.use((req, res, next) => {
res.setHeader('Origin-Agent-Cluster', '?1');
// X-XSS-Protection NICHT setzen — aus Browsern entfernt (2023)
next();
});
// Konfiguration testen:
// curl -sI http://localhost:3000 | grep -iE "(origin-agent|x-powered|powered)" Wie steht Ihre Domain bei Erweiterte Header?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Wie setze ich Origin-Agent-Cluster in Express.js?
Mit einer globalen Middleware: app.use((req, res, next) => { res.setHeader("Origin-Agent-Cluster", "?1"); next(); }); Diese Middleware muss vor den Route-Definitionen registriert werden. Alternativ können Sie den Header über das Helmet-Paket setzen, das in neueren Versionen Origin-Agent-Cluster unterstützt.
Warum prüft die HTTPS-Middleware sowohl req.secure als auch x-forwarded-proto?
req.secure ist true, wenn Express direkt über HTTPS erreichbar ist. Hinter einem Reverse Proxy (Nginx, Load Balancer) terminiert HTTPS am Proxy — Express sieht dann HTTP-Anfragen mit dem Header X-Forwarded-Proto: https. Ohne diese Kombination würde die Middleware alle Anfragen fälschlicherweise als unsicher einordnen.
Sollte ich trust proxy in Express aktivieren?
Ja, wenn Express hinter einem vertrauenswürdigen Reverse Proxy läuft: app.set("trust proxy", 1). Damit wertet Express X-Forwarded-* Header aus, was req.secure und req.hostname korrekt macht. Setzen Sie nur die Anzahl der Proxy-Ebenen, denen Sie vertrauen — nicht einfach true für alle Proxies.
Wie entferne ich X-Powered-By in Express?
Mit app.disable("x-powered-by") deaktivieren Sie den X-Powered-By: Express Header global. Alternativ: app.set("x-powered-by", false). Express sendet diesen Header standardmäßig — er verrät die verwendete Framework-Version und sollte in Produktionsumgebungen immer entfernt werden.
Ist Helmet.js eine Alternative zur manuellen Middleware?
Ja. helmet() setzt viele Security-Header auf einmal. Für Origin-Agent-Cluster: helmet({ originAgentCluster: true }). Helmet.js ist eine gute Grundlage, aber prüfen Sie die Standardwerte — nicht alle Defaults sind für jede Anwendung geeignet. Die manuelle Middleware gibt mehr Kontrolle.
Wie kombiniere ich den WWW-Redirect mit dem HTTPS-Redirect in Express?
Registrieren Sie beide Middlewares in der richtigen Reihenfolge: Zuerst HTTPS-Redirect, dann WWW-Redirect. Express führt Middlewares in Registrierungsreihenfolge aus. Dadurch wird eine HTTP-www-Anfrage zuerst auf HTTPS geleitet, dann das www entfernt — maximal zwei Redirects, die Browser nach dem ersten Besuch cachen.