Wie setze ich in Node.js korrekt Cross-Origin Resource Sharing (CORS) um?

Melden
  1. Einführung in CORS
  2. CORS in Node.js implementieren
  3. Installation des CORS-Pakets
  4. Einbinden und Konfigurieren von CORS
  5. Umgang mit Preflight-Anfragen
  6. Eigene Header setzen (wenn kein Middleware-Paket verwendet wird)
  7. Zusammenfassung

Einführung in CORS

Cross-Origin Resource Sharing (CORS) ist ein Sicherheitsmechanismus, der es Webbrowsern erlaubt, kontrolliert Ressourcen von einer anderen Domain als der eigenen anzufordern. Standardmäßig blockieren Browser solche Anfragen, wenn sie von einer anderen Origin stammen, um Sicherheitsrisiken zu minimieren. Für API-Server in Node.js bedeutet das, dass man explizit angeben muss, welche Ursprünge Zugriff auf die Ressourcen haben, um diese Sicherheitsrichtlinie zu umgehen.

CORS in Node.js implementieren

Die einfachste und gängigste Methode zur Implementierung von CORS in einer Node.js-Anwendung ist die Verwendung des offiziellen Middleware-Pakets cors. Es handelt sich dabei um eine fertige Lösung, die problemlos mit Frameworks wie Express zusammenarbeitet.

Installation des CORS-Pakets

Zunächst muss das Paket installiert werden. Das geht über npm mit dem Befehl npm install cors. Dieses Paket stellt eine Middlewarefunktion bereit, die in der Serverkonfiguration eingebunden wird und automatisch die nötigen Header setzt.

Einbinden und Konfigurieren von CORS

In einer Express-Anwendung importierst du das Paket, integrierst die Middleware und definierst die CORS-Optionen. Beispielhaft sieht das so aus:

const express = require(express);const cors = require(cors);const app = express();const corsOptions = { origin: https://deine-frontend-domain.de, // Erlaubte Origin methods: , // Erlaubte HTTP-Methoden allowedHeaders: , // Erlaubte Header credentials: true, // Ob Cookies oder Authorization Header gesendet werden dürfen optionsSuccessStatus: 204 // Statuscode für OPTIONS Preflight-Anfragen};app.use(cors(corsOptions));app.get(/api/data, (req, res) => { res.json({ message: CORS funktioniert! });});app.listen(3000, () => { console.log(Server läuft auf Port 3000);});

In diesem Beispiel wird nur die Origin https://deine-frontend-domain.de explizit erlaubt. Alternativ kann als Wert auch "*" angegeben werden, um alle Ursprünge zuzulassen. Dies birgt jedoch Sicherheitsrisiken und sollte nur bei öffentlichen APIs verwendet werden.

Umgang mit Preflight-Anfragen

Browser senden bei bestimmten Anfragen, z. B. bei Verwendung von Methoden wie PUT oder DELETE oder speziellen Headern, eine sogenannte Preflight-Request vom Typ OPTIONS, um zuerst abzufragen, ob der Server solche Anfragen akzeptiert. Das cors-Paket kümmert sich automatisch darum, die passenden Header bei diesen Anfragen zurückzugeben, sodass sie korrekt beantwortet werden.

Eigene Header setzen (wenn kein Middleware-Paket verwendet wird)

Falls kein Framework oder Paket verwendet wird, kann man die CORS-Header auch manuell setzen. Dabei ist es wichtig, die Header Access-Control-Allow-Origin, Access-Control-Allow-Methods und Access-Control-Allow-Headers zu beachten. Außerdem muss auf OPTIONS-Anfragen mit den erlaubten Methoden reagiert werden. Ein einfaches Beispiel mit dem in Node.js eingebauten http-Modul sieht so aus:

const http = require(http);const server = http.createServer((req, res) => { // Setze CORS Header res.setHeader(Access-Control-Allow-Origin, https://deine-frontend-domain.de); res.setHeader(Access-Control-Allow-Methods, GET, POST, PUT, DELETE); res.setHeader(Access-Control-Allow-Headers, Content-Type, Authorization); res.setHeader(Access-Control-Allow-Credentials, true); if (req.method === OPTIONS) { res.writeHead(204); return res.end(); } if (req.url === /api/data && req.method === GET) { res.writeHead(200, { Content-Type: application/json }); res.end(JSON.stringify({ message: CORS funktioniert auch ohne Middleware! })); } else { res.writeHead(404); res.end(); }});server.listen(3000, () => { console.log(Server läuft auf Port 3000);});

Zusammenfassung

Um CORS in Node.js korrekt umzusetzen, sollte man möglichst das Middleware-Paket cors verwenden, weil es die nötigen Header automatisch verwaltet und gängige Probleme, wie Preflight-Anfragen, elegant löst. Dabei ist es empfehlenswert, die Origin gezielt einzuschränken und nicht allgemein freizugeben, um Sicherheitsrisiken zu reduzieren. Man sollte zudem darauf achten, dass die HTTP-Methoden, Header und, falls nötig, die Zugriffsrechte für Cookies oder Authentifizierungsinformationen richtig konfiguriert sind.

0

Kommentare