Neuer Weg zur Kontrolle Ihrer HTTP-Antworten

Automatisch übersetzt von Deepl

Ab 4D 21 können 4D Entwickler nun die volle Kontrolle über HTTP-Antworten mit Hilfe einer einfachen Konfigurationsdatei übernehmen: HTTPRules.json. Ganz gleich, ob Sie die Sicherheit verbessern, die Leistung optimieren oder den Zugriff auf statische Ressourcen verwalten möchten, diese Funktion bietet Ihnen die nötige Flexibilität, ohne dass Sie eine einzige Zeile Code schreiben müssen.
Lassen Sie uns in die Möglichkeiten eintauchen und wie man sie nutzt.

Wie Regeln angewendet werden

Um die Funktion zu aktivieren, legen Sie eine HTTPRules.json-Datei in den Sources-Ordner Ihres Projekts.
Alternativ können Sie die Regeln auch programmatisch definieren, indem Sie die Regeln im Attribut settings. rules festlegen und das Einstellungsobjekt an die Funktion Web server. start( ) übergeben. Dies ersetzt Regeln, die in einer vorhandenen Datei definiert sind.

Der Inhalt der Datei oder des Attributs settings. rules ist eine Sammlung von Regeln.
Jede Regel ist ein Objekt und wird durch ein Muster eines regulären Ausdrucks (regexPattern) definiert, das mit dem URI der Anfrage übereinstimmt.

Die Aktionen einer Regel werden durch ihr Attribut definiert:

  • setHeaders: die Header der HTTP-Antwort zu ändern.
  • addHeaders: Hinzufügen von Headern zur HTTP-Antwort.
  • removeHeaders: um Header aus der HTTP-Antwort zu entfernen.
  • denyAccess: den Zugriff auf eine Ressource verweigern oder erlauben.
  • redirect: die HTTP-Anfrage umzuleiten.
  • status: um einen benutzerdefinierten HTTP-Antwortstatus zu definieren.

Wenn der HTTP-Server mit Regeln gestartet wird, sind die berücksichtigten Regeln über das Attribut Web server.rules abrufbar.
Beachten Sie, dass die Regeln nacheinander ausgewertet werden und dass mehrere Regeln auf eine einzige Anfrage angewendet werden können.

BESCHREIBUNG DER AKTIONEN

Benutzerdefinierte Kopfzeilen setzen

Sie können vorhandene Header der HTTP-Antwort aktualisieren und sie erstellen, wenn sie nicht vorhanden sind.
Diese Aktion wird durch das Attribut setHeaders definiert. Es handelt sich um ein Objekt, das die Schlüssel-Wert-Header-Paare enthält, die in der HTTP-Antwort gesetzt werden sollen.

Beispiel:

{
"regexPattern": "/(.*)",
"setHeaders": {
"X-Frame-Options": "SAMEORIGIN",
"Content-Security-Policy": "default-src 'self'"
}
}

Mit dieser Regel enthalten alle HTTP-Antworten die Header X-Frame-Options und Content-Security-Policymit den definierten Werten, zusätzlich zu den vom 4D HTTP Server definierten Werten.

Benutzerdefinierte Header hinzufügen

Sie können benutzerdefinierte Header in die HTTP-Antwort einfügen. Dies ist besonders nützlich für Header, die mehrere Instanzen haben können, wie Cookies.
Diese Aktion wird durch das Attribut addHeaders definiert. Es handelt sich um ein Objekt, das die Schlüssel-Wert-Header-Paare enthält, die der HTTP-Antwort hinzugefügt werden sollen.

Beispiel:

{
"regexPattern": "/(.*)",
"addHeaders": {
"Set-Cookie": "myCookie=123456; Max-Age=14400"
}
}

Mit dieser Regel enthalten alle HTTP-Antworten einen weiteren Set-Cookie Header mit dem definierten Wert, zusätzlich zu den vom 4D HTTP Server oder von Ihnen selbst definierten Headern.

Header entfernen

Sie können unerwünschte Header aus der Antwort entfernen, wie z. B. Server, der die 4D Version preisgibt.
Diese Aktion wird durch das Attribut removeHeaders definiert. Es ist eine Sammlung von Header-Schlüsseln, die aus der HTTP-Antwort zu entfernen sind.

Beispiel:

{
"regexPattern": "/(.*)",
"removeHeaders": ["Server", "X-Frame-Options"]
}

Mit dieser Regel werden die Header „Server“ und „X-Frame-Options“ aus allen HTTP-Antwort-Headern entfernt.

⚠️ Einige Header können nicht aktualisiert, hinzugefügt oder entfernt werden, wie z.B. Date und Content-Length.

Zugriff auf Ressourcen verweigern/erlauben

Sie können den Zugriff auf bestimmte URIs blockieren, indem Sie standardmäßig einen 403 Forbidden-Status zurückgeben.
Diese Aktion wird durch das Attribut denyAccess definiert. Es ist ein Boolescher Wert: true, um den Zugriff zu verweigern und false, um ihn zu erlauben.

Beispiel:

{
"regexPattern": "/private/(.*)",
"denyAccess": true,
}

Mit dieser Regel werden alle Ressourcen aus dem Ordner /private/ und den Unterordnern nicht zugestellt.

Sie können auch explizit den Zugriff auf Unterordner erlauben:

Beispiel:

{
"regexPattern": "/private/allowed/(.*)",
"denyAccess": false
}

Mit dieser Regel ist der Zugriff auf alle Ressourcen aus dem Ordner /private/allowed/ und den Unterordnern möglich, auch wenn die vorherige Regel, die den Zugriff auf den übergeordneten Ordner /private/ verweigert, definiert ist.

Anfragen umleiten

Sie können Anfragen an eine andere URL umleiten. Sie können den Statuscode angeben (standardmäßig 301 für permanent, 302 für temporär).
Diese Aktion wird durch das Attribut redirect definiert. Es ist ein Text, der die Basis-URL der Umleitung enthält.

Beispiel:

{
"regexPattern": "^/images/(.*)",
"redirect": "https://cdn.example.com/images/",
"status": 301
}

Mit dieser Regel werden alle Ressourcen aus dem Unterordner images an das definierte CDN weitergeleitet.
Beachten Sie, dass das „^“ am Anfang des Regex-Musters für die Umleitung wichtig ist, damit keine falschen URIs zurückgegeben werden.

Benutzerdefinierte Status-Codes festlegen

Sie können den Standard-Statuscode für eine HTTP-Antwort außer Kraft setzen.
Diese Aktion wird durch das Attribut status definiert. Es handelt sich um eine Zahl, die von der HTTP-Antwort als Statuscode zurückgegeben wird.

Beispiel:

{
"regexPattern": "^/maintenance.html",
"status": 503
}

Mit dieser Regel wird der Statuscode 503 zurückgegeben, wenn die Seite „maintenance.html“ angefordert wird.

⚠️ Stellen Sie sicher, dass der Status, den Sie selbst definieren, mit der vom HTTP-Server gesendeten Antwort übereinstimmt!

Kombinieren von Aktionen und Regeln

Mehrere Aktionen können in einer Regel kombiniert werden, wenn sie das gleiche regexPattern verwenden.

Beispiel:

{
"regexPattern": "/docs/(.*).html",
"addedHeaders": {
"Cache-Control": "max-age=3600"
},
"removedHeaders": ["X-Powered-By"]
}

Diese Regel gilt für alle HTML-Dateien, die sich im Unterordner docs befinden.

Regeln können auch in einer logischen Reihenfolge kombiniert werden, um HTTP-Serverantworten vollständig zu konfigurieren.

Beispiel für eine vollständige Regelsammlung:

[
{
"comment": "Alle Anfragen: GET-Methode erlauben, 'Server'-Header entfernen und Sicherheits-Header setzen",
"regexPattern": "/(.*)",
"setHeaders": {
"Allow": "GET",
"X-Frame-Options": "SAMEORIGIN",
"Content-Security-Policy": "default-src 'self'"
},
"removeHeaders": [
"Server"
]
},
{
"comment": "REST-Anfragen: POST-Methode zulassen",
"regexPattern": "/rest/(.*)",
"addHeaders": {
"Allow": "POST"
}
},
{
"comment": "HTML-Dateien im Ordner 'doc': Cache-Kontrolle setzen",
"regexPattern": "/docs/(.*).html",
"setHeaders": {
"Cache-Control": "Max-Age=3600"
},
"removeHeaders": [
"X-Powered-By"
]
},
{
comment": "Status 503 auf der Seite 'maintenance'",
"regexPattern": "^/maintenance.html",
"status": 503
},
{
"comment": "CSS- und JS-Dateien umleiten",
"regexPattern": "^(.*\\\\.(css|js))",
"redirect": "https://cdn.example.com/"
},
{
"comment": "Bilder mit permanentem Statuscode umleiten",
"regexPattern": "^(.*\\\\.(jpg|jpeg|png|gif))",
"redirect": "https://cdn.example.com/images/",
"status": 301
},
{
"comment": "Deny access for all resources placed in the 'private' folder",
"regexPattern": "/private/(.*)",
"denyAccess": true
},
{
"comment": "Erlaube den Zugriff auf alle Ressourcen, die sich im Ordner 'private/allowed' befinden",
"regexPattern": "/private/allowed/(.*)",
"denyAccess": false
}
]

Zusammenfassung

Mit HTTPRules.json wird 4D zu einem leistungsfähigen und flexiblen HTTP-Server. Sie können jetzt:

  • Header hinzufügen, ändern oder entfernen
  • Zugänge blockieren oder erlauben
  • Anfragen umleiten
  • Benutzerdefinierte Statuscodes festlegen

Sie brauchen keine komplexe Filterlogik per Code, sondern konfigurieren einfach in der Datei HTTPRules.json und können loslegen!
Und wenn Ihre Anwendungen benutzerdefinierte Regeln benötigen (z.B. Sicherheitsregeln), abhängig von den eingesetzten Umgebungen oder Kunden, ist es sehr einfach, dies mit dem Web server Befehl!
Sind Sie bereit, Ihre Webbereitstellung zu vereinfachen? Beginnen Sie noch heute mit der Verwendung von Regeln.

Avatar
- Product Owner - Damien Fuzeau ist seit Februar 2019 Mitglied des 4D Produktteams. Als Product Owner ist er für das Schreiben von User Stories zuständig, die er dann in funktionale Spezifikationen umsetzt. Zu seinen Aufgaben gehört es auch, dafür zu sorgen, dass die gelieferten Funktionsimplementierungen den Anforderungen der Kunden entsprechen. Damien hat an der Universität von Nantes einen Abschluss in Softwaretechnik gemacht. Er verbrachte mehr als 23 Jahre in seinem früheren Unternehmen, zunächst als Entwickler (er entdeckte 4D im Jahr 1997) und später als technischer Leiter und Softwarearchitekt. Dieses Unternehmen ist ein 4D OEM Partner und hat 4D basierte Geschäftssoftware für Tausende von Usern auf Hunderten von Servern eingesetzt. Damien ist also mit der Entwicklung und dem Einsatz von 4D in einem mehrsprachigen Kontext vertraut.