Reporting API für Express.js konfigurieren
Report-To, NEL und Reporting-Endpoints in Express.js einrichten — per Middleware für Header, express.json() für Report-Empfang und CORS-Konfiguration für Cross-Origin-Reports.
Reporting API auf Express.js
Express.js ist der ideale Stack für die Reporting API: Eine Middleware setzt die Header für alle Responses, und express.json() parsed eingehende Reports automatisch. Der Vorteil gegenüber statischen Webservern: Sie können Report-To JSON-Objekte sicher mit JSON.stringify() erzeugen, CORS-Header dynamisch setzen und Reports direkt in Ihrer Anwendung verarbeiten. Reporting API bringt 4 von 166 Punkten im Wolf-Agents Web Security Check.
Reporting-Header per Middleware setzen
Erstellen Sie eine Middleware, die Report-To, NEL und Reporting-Endpoints für alle Responses setzt. Nutzen Sie JSON.stringify() für korrekt formatiertes JSON — Report-To erwartet komma-separierte JSON-Objekte, kein JSON-Array.
// Reporting Headers Middleware
app.use((req, res, next) => {
// Report-To: komma-separierte JSON-Objekte (KEIN JSON-Array!)
const groups = [
{
group: 'nel',
max_age: 31536000,
endpoints: [{ url: 'https://reports.example.com/nel' }]
},
{
group: 'default',
max_age: 31536000,
endpoints: [{ url: 'https://reports.example.com/default' }]
}
];
const reportTo = groups.map(g => JSON.stringify(g)).join(', ');
res.setHeader('Report-To', reportTo);
// NEL
const nel = JSON.stringify({
report_to: 'nel',
max_age: 31536000,
include_subdomains: true,
failure_fraction: 1.0,
success_fraction: 0.01
});
res.setHeader('NEL', nel);
// Reporting-Endpoints
res.setHeader('Reporting-Endpoints',
'default="https://reports.example.com/default", csp="https://reports.example.com/csp"'
);
next();
}); Report-Endpoint mit CORS implementieren
Browser senden Reports Cross-Origin — auch wenn der Endpoint auf derselben Domain liegt. Ohne CORS-Header lehnt der Browser die Zustellung ab. Konfigurieren Sie express.json() mit dem korrekten Content-Type für Browser-Reports.
// CORS-Middleware für Report-Endpoints
const reportCors = (req, res, next) => {
res.set('Access-Control-Allow-Origin', '*');
res.set('Access-Control-Allow-Methods', 'POST');
res.set('Access-Control-Allow-Headers', 'Content-Type');
if (req.method === 'OPTIONS') return res.status(204).end();
next();
};
// NEL-Report-Endpoint
app.post('/reports/nel', reportCors, express.json({ type: 'application/reports+json' }), (req, res) => {
console.log('NEL Report:', JSON.stringify(req.body, null, 2));
// Reports verarbeiten/speichern
res.status(204).end();
});
// CSP-Report-Endpoint
app.post('/reports/csp', reportCors, express.json({ type: 'application/csp-report' }), (req, res) => {
console.log('CSP Report:', JSON.stringify(req.body, null, 2));
res.status(204).end();
}); Wie steht Ihre Domain bei Reporting API?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Warum brauche ich CORS für den Report-Endpoint?
Browser senden Reporting-API-Reports Cross-Origin — auch wenn der Endpoint auf derselben Domain liegt. Ohne Access-Control-Allow-Origin Header lehnt der Browser die Zustellung ab und die Reports gehen verloren. Setzen Sie mindestens Access-Control-Allow-Origin: * und Access-Control-Allow-Methods: POST.
Welchen Content-Type haben Browser-Reports?
Browser senden NEL- und Reporting-API-Reports als application/reports+json. CSP-Reports verwenden application/csp-report. Konfigurieren Sie express.json() mit dem type-Parameter für beide Content-Types.
Kann ich Report-To JSON als String zusammenbauen?
Nein, vermeiden Sie manuell zusammengebaute JSON-Strings. Nutzen Sie JSON.stringify() mit JavaScript-Objekten — das verhindert Escaping-Fehler. Report-To erwartet komma-separierte JSON-Objekte, kein JSON-Array.
Welche Browser unterstützen Report-To und NEL?
Report-To, NEL und Reporting-Endpoints werden ausschließlich von Chromium-basierten Browsern unterstützt — Chrome 70+, Edge 79+ und Opera. Firefox und Safari implementieren keinen dieser Header.
Soll ich Reports synchron oder asynchron verarbeiten?
Asynchron. In Produktion können tausende Reports pro Minute eingehen. Speichern Sie Reports in einer Queue (z.B. BullMQ, Redis) und verarbeiten Sie sie im Hintergrund. Der Report-Endpoint sollte sofort mit Status 204 antworten.