CORS
CORS-Konfiguration in der Anwendung.
Einführung
CORS (Cross Origin Resource Sharing) ist ein Validierungsprozess, den Browser durchführen, um zu prüfen, ob sie Ressourcen integrieren können, die von einer anderen Adresse bereitgestellt werden.
Er wird implementiert, wenn:
- Bei der Entwicklung der Frontend-Schicht mit dem Webpack-Server, wie bei der Entwicklung von Web-Oberflächen (Website oder Webanwendung) unter Verwendung moderner Technologien wie ReactJS und VueJS.
- Die Adresse des Frontends sich von der Adresse der Dienste unterscheidet, zum Beispiel wenn die Dienste unter der Adresse
http://localhost:9000laufen und das Frontend unter der Adressehttp://localhost:3000läuft. - In der Produktion, zum Beispiel, die Dienste unter einer eigenen Subdomain
api.beispiel.comlaufen und das Frontend unterwww.beispiel.com.
Mehr über CORS:
Netuno ist vorbereitet, die CORS-Integration einfach und unmittelbar durchzuführen.
Konfiguration
Die CORS-Konfiguration wird in der Konfigurationsdatei der Anwendung je nach Umgebung vorgenommen.
Dazu navigieren Sie innerhalb der Anwendung, die Sie entwickeln, zur Umgebungskonfigurationsdatei. In diesem Beispiel verwenden wir die Entwicklungsumgebungsdatei unter:
- 📂
config/_development.json
Prüfen Sie, ob nicht bereits CORS-Konfigurationen vorhanden sind; falls nicht, fügen Sie am Ende der Konfigurationsdatei (im JSON-Format) die Konfigurationsparameter hinzu:
{
...
"cors": [
{
"enabled": true,
"origins": [ "http://localhost:3000", "http://127.0.0.1:3000" ]
}
]
...
}
Die CORS-Konfiguration ist ein Array und unterstützt mehrere verschiedene CORS-Regeln.
Ursprünge
Im Parameter origins steht die Liste der Frontend-Adressen, die mit den Diensten integriert werden.
Produktion
In der Produktion müssen wir als Ursprünge die Adressen definieren, unter denen das Frontend online läuft.
Die Konfigurationsdatei der Anwendung, in der die Definition von cors enthalten ist, sollte je nach Umgebung unterschiedlich sein.
Die Konfigurationsdatei der Anwendung sollte sein:
- 📂
config/_production.json
Beispiel der CORS-Konfiguration:
{
...
"cors": [
{
"enabled": true,
"origins": [ "https://mein-projekt.com", "https://www.mein-projekt.com" ]
}
]
...
}
Die Konfigurationsdatei der Anwendung ist _production.json gemäß der Umgebungskonfiguration von Netuno, die sich in der Datei netuno/config.js befindet:
config.env = 'production'
Header (HTTP-Header)
Der Standard-Header (Header des HTTP-Protokolls) ist:
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization
Access-Control-Allow-Expose-Headers: Content-Length,Content-Range
Access-Control-Allow-Credentials: true
Um den Standard-Header anzupassen, fügen Sie den Konfigurationsparameter header hinzu, zum Beispiel:
{
...
"cors": [
{
"enabled": true,
"header": {
"Access-Control-Allow-Headers": "Authorization"
},
"origins": [ "http://localhost:3000", "http://127.0.0.1:3000" ]
}
]
...
}
Im obigen Beispiel wird im Header nur Authorization akzeptiert statt aller anderen, die standardmäßig definiert waren.
Sie können neue Definitionen im Header hinzufügen sowie die Standarddefinition ersetzen.
Manuell
CORS kann auch manuell konfiguriert werden, anstatt den automatischen Mechanismus von Netuno zu verwenden.
In Ihrer Netuno-Anwendung ändern Sie einfach die Datei:
📂 server/core/_request_url.js
Und verwenden Sie den folgenden Code:
const httpHeaderOrigin = _header.getString("Origin", "null")
if (httpHeaderOrigin == 'https://www.meine-app.com'
|| httpHeaderOrigin == 'http://localhost'
|| httpHeaderOrigin == 'http://localhost:3000') {
_header.response.set("Access-Control-Allow-Origin", httpHeaderOrigin)
_header.response.set("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS")
_header.response.set("Access-Control-Allow-Headers", "content-type,x-requested-with,authorization")
_header.response.set("Access-Control-Allow-Credentials", true)
}
Beachten Sie, dass im obigen Code das if die 'Headers' entsprechend der Ursprungsadresse (Origin) einschränkt.
Denken Sie daran, dies an die Adressen anzupassen, die Sie verwenden werden.
Auf diese Weise unterstützen alle Dienste und Adressen Ihrer Anwendung die CORS-Header.
Nur für isolierte Dienste
Wenn Sie das Sicherheitsniveau erhöhen möchten, indem Sie die Header nur für bestimmte Dienste aktivieren, verwenden Sie dieselbe Codelogik in der Datei:
📂 server/core/_service_config.js
Anstatt in der Datei:
📂 server/core/_request_url.js
Fazit
Wenn CORS konfiguriert ist, antwortet Netuno automatisch mit dem standardmäßigen Header (HTTP-Protokoll-Header) für die als origins konfigurierten Adressen.
Die Standard-headers können angepasst und geändert werden.
Sie können mehrere CORS-Regeln konfigurieren.
Obwohl Netuno die manuelle Konfiguration der CORS-Regeln programmatisch unterstützt, ist es vorzuziehen, den automatischen Mechanismus zu verwenden, der in die Anwendungskonfiguration integriert ist.