Image Serving unterstützt einen einfachen Anfragevorverarbeitungsmechanismus, der auf Übereinstimmungs- und Ersatzregeln für reguläre Ausdrücke basiert.
Kollektionen von Vorab-Verarbeitungsregeln (Regelsätze) können an Bildkataloge oder den Standardkatalog angehängt werden. Regeln im Standardkatalog gelten nur, wenn die Anforderung keinen bestimmten Hauptbildkatalog identifiziert.
Vorab-Verarbeitungsregeln für Anfragen können den Pfad und die Abfrageabschnitte von Anforderungen ändern, bevor sie von der Platform Server, einschließlich der Bearbeitung des Pfads, des Hinzufügens von Befehlen, der Änderung von Befehlswerten und der Anwendung von Vorlagen oder Makros. Regeln können auch verwendet werden, um bestimmte Sicherheitsfunktionen zu konfigurieren und zu überschreiben, die normalerweise nur mit Katalogattributen gesteuert werden, z. B. Anforderungsverschleierung, Wasserzeichen und Beschränkung des Diensts auf bestimmte Client-IP-Adressen.
Regelsätze werden als XML-Dokumentdateien gespeichert. Der relative oder absolute Pfad der Regelsatzdatei muss in attribute::RuleSetFile
.
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
<rule>
<expression>
<varname>
expression
</varname></expression>
<substitution>
<varname>
substitution
</varname></substitution>
<addressfilter>
<varname>
addressFilter
</varname></addressfilter>
<header>
<varname>
headerValue
</varname></header>
</rule>
</ruleset>
Die <?xml>
und <ruleset>
-Elemente sind immer in einer gültigen XML-Regelsatz-Datei erforderlich, auch wenn keine tatsächlichen Regeln definiert sind.
One <ruleset>
Element mit beliebiger Anzahl von <rule>
-Elemente erlaubt sind.
Beim Inhalt von Regeldateien zur Vorverarbeitung wird zwischen Groß- und Kleinschreibung unterschieden.
Eine Kopie von RuleSet.xsd wird im Katalogordner bereitgestellt und sollte verwendet werden, um eine Regelsatzdatei vor der Registrierung in der catalog.ini -Datei. Beachten Sie, dass Image Serving eine interne Kopie von RuleSet.xsd zur Validierung.
Vor jeder anderen Verarbeitung wird eine eingehende HTTP-Anforderung teilweise analysiert, um zu bestimmen, welcher Bildkatalog angewendet werden soll. Sobald der Katalog identifiziert wurde, wird der Regelsatz für den ausgewählten Katalog (oder der Standardkatalog, wenn kein bestimmter Katalog identifiziert wurde) angewendet.
Die <rule>
-Elemente in der Reihenfolge durchsucht werden, die für eine Übereinstimmung mit dem Inhalt der <expression>
Element ( expression
).
Wenn eine <rule>
zugeordnet wird, wird das optionale substitution
wird angewendet und die geänderte Anforderungszeichenfolge wird zur normalen Verarbeitung an den Anforderungsparser des Servers übergeben.
Wenn keine erfolgreiche Übereinstimmung beim Ende des <ruleset>
erreicht wird, wird die Anforderung ohne Änderung an den Parser übergeben.
Das Standardverhalten kann mit dem OnMatch
-Attribut <rule>
-Element. OnMatch
kann auf break
(Standard), continue
oder error
.
Element und Attribut | Verhalten bei Übereinstimmung |
---|---|
<rule OnMatch="break"> |
Die Regelverarbeitung wird sofort beendet, nachdem die Ersetzung für diese Regel vorgenommen wurde. Standard. |
<rule OnMatch="continue"> |
Die Ersetzung wird angewendet und die Verarbeitung wird mit der nächsten Regel fortgesetzt. |
<rule OnMatch="error"> |
Die Regelverarbeitung wird sofort beendet und der Antwortstatus "Anfrage verweigert"wird an den Client zurückgegeben. |
Die rule
-Element kann optional Attribute definieren, die die entsprechenden Katalogattribute überschreiben, wenn die Regel erfolgreich abgeglichen wird. Wenn mehrere übereinstimmende Regeln dasselbe Attribut festlegen, hat das letzte Vorrang. Siehe Regel -Element für eine Liste von Attributen, die mit Regeln gesteuert werden können.
Einfache Zeichenfolgenabgleiche funktionieren für sehr einfache Anwendungen, aber in den meisten Fällen sind reguläre Ausdrücke erforderlich. Während reguläre Ausdrücke den Branchenstandard aufweisen, variiert die spezifische Implementierung von Instanz zu Instanz.
package java.util.regex beschreibt die spezifische Implementierung regulärer Ausdrücke, die von Image Serving verwendet wird.
Um komplexe URL-Änderungen zu erleichtern, können Unterzeichenfolgen im Ausdruck erfasst werden, indem die Unterzeichenfolge in Klammern (…) eingeschlossen wird. Erfasste Teilzeichenfolgen werden in der Reihenfolge mit 1 beginnend gemäß der Position der führenden Klammer nummeriert. Die erfassten Teilzeichenfolgen können in die Substitution mit $ *
n*
, wobei n
ist die Sequenznummer der erfassten Teilzeichenfolge.
An jeden Bildkatalog mit dem Katalogattribut kann eine Regelsatzdatei angehängt werden attribute::RuleSetFile
. Sie können die Regelsatzdatei zwar jederzeit bearbeiten, der Bildserver erkennt die Änderungen jedoch nur, wenn der zugehörige Bildkatalog neu geladen wird. Diese Neuladung erfolgt, wenn der Plattformserver gestartet oder neu gestartet wird und wenn die primäre Katalogdatei über eine .ini -Dateisuffix, geändert oder "geändert"wird, um das Dateidatum zu ändern.
Beispiel A. Definieren Sie eine Regel, die die Bildqualitätseinstellungen erhöht, wenn der Bildname das Suffix " _hg":
<rule>
<expression>(?i)_hg$</expression>
<substitution>\?&qlt=95,1&resmode=bicub</substitution>
</rule>
Der Regelausdruck gibt einen Treffer an, bei dem nicht zwischen Groß- und Kleinschreibung unterschieden wird: _hg" am Ende der URL-Zeichenfolge. Das Suffix wird durch die angegebene Abfragezeichenfolge ersetzt, die die Bildqualitätseinstellungen ändert. Beachten Sie Folgendes: ?
-Zeichen in der Ersatzzeichenfolge ist maskiert, da es sich um ein Sonderzeichen in regulären Ausdrücken handelt.
Die erforderliche Kodierung für das kaufmännische Und-Zeichen. Alternativ kann die Ersatzzeichenfolge in einen CDATA-Block eingeschlossen werden:
<substitution><![CDATA[&qlt=95,1&resmode=bicub]]></substitution>
Beispiel B. Eine bestimmte Webanwendung lässt keine Abfragezeichenfolgen zu. Definieren einer Regel, die das nachfolgende Pfadelement übersetzt small
, medium
oder large
zu einer Vorlage hinzufügen, wobei der restliche Pfad als Bildname verwendet wird. Beispiel: myCat/myImage/small
würde übersetzen in myCat/smallTemplate?src=myCat/myImage
.
Wir können Unterzeichenfolgen verwenden, um die Anforderung neu zu strukturieren:
<rule>
<expression>([^/]+)/(small|medium|large)$</expression>
<substitution>$2Template?src=sample/$1</substitution>
</rule>