EdgeScript (ES) fournit six fonctions logiques pour construire des expressions conditionnelles dans les règles CDN : and, or, not, eq, ne et null. Les trois opérateurs booléens (and, or, not) prennent en charge l'évaluation par court-circuit. Le moteur interrompt ainsi l'évaluation des arguments dès que le résultat est déterminé.
Résumé des fonctions
| Fonction | Signature | Court-circuit | Valeur de retour |
|---|---|---|---|
and |
and(arg, ...) : Boolean |
S'arrête au premier false |
true si tous les arguments sont vrais |
or |
or(arg, ...) : Boolean |
S'arrête au premier true |
true si au moins un argument est vrai |
not |
not(arg) : Boolean |
— | Booléen inversé |
eq |
eq(arg1, arg2) : Boolean |
— | true en cas d'égalité |
ne |
ne(arg1, arg2) : Boolean |
— | true en cas d'inégalité |
null |
null(v) : Boolean |
— | true si v est une chaîne vide, un tableau vide ou un dictionnaire vide |
and
Signature : and(arg, ...) : Boolean
Exécute l'opérateur logique ET. Dès qu'un argument s'évalue à false, l'évaluation par court-circuit s'interrompt et les arguments restants sont ignorés.
Paramètres : une ou plusieurs valeurs de n'importe quel type.
Valeur de retour : true si toutes les valeurs s'évaluent à true ; false si l'une des valeurs s'évalue à false.
Exemple : définissez un en-tête de réponse uniquement lorsqu'un paramètre de requête spécifique est présent et correspond à une valeur donnée.
if and($arg_mode, eq($arg_mode, 'set_header')) {
add_rsp_header('USER-DEFINED-1','path1')
}
Si la requête inclut
mode=set_header,and()évalue les deux conditions et renvoietrue. L'en-tête de réponseUSER-DEFINED-1est alors défini.En l'absence du paramètre
modedans la requête,$arg_modes'évalue àfalse. L'évaluation par court-circuit s'arrête immédiatement,eq()n'est jamais appelée et l'en-tête de réponse n'est pas défini.
or
Signature : or(arg, ...) : Boolean
Exécute l'opérateur logique OU. Dès qu'un argument s'évalue à true, l'évaluation par court-circuit s'interrompt et les arguments restants sont ignorés.
Paramètres : une ou plusieurs valeurs de n'importe quel type.
Valeur de retour : true si au moins une valeur s'évalue à true ; false si toutes les valeurs s'évaluent à false.
Exemple : redirigez les requêtes en fonction de la valeur de l'en-tête From.
if and($http_from, or(eq($http_from, 'wap'), eq($http_from, 'comos'))) {
rewrite(concat('http://example.com.cn/zt_d/we2015/', $http_from), 'enhance_redirect')
}
Lorsque l'en-tête
Fromvautwapoucomos, la requête est redirigée (HTTP 302) vershttp://example.com.cn/zt_d/we2015/[wap|comos].Si l'en-tête
Fromvautwap,or()renvoie immédiatementtrueet la vérification decomosest ignorée.
not
Signature : not(arg) : Boolean
Exécute l'opérateur logique NON. Les valeurs undef et false sont évaluées comme fausses, tandis que toutes les autres valeurs sont évaluées comme vraies.
Paramètre : exactement une valeur de n'importe quel type.
Valeur de retour : true ou false.
Exemple : bloquez les requêtes auxquelles il manque des paramètres ou des cookies obligatoires.
if not($arg_key) {
exit(403)
}
if not($cookie_user) {
exit(403, 'not cookie user')
}
if not(0) {
exit(403)
}
if not(false) {
exit(403)
}
not($arg_key): si la requête ne contient pas le paramètre de requêtekey,$arg_keyvautundef.not(undef)renvoietrueet la requête se termine avec le code HTTP 403.not($cookie_user): en l'absence du cookiecookie_userdans la requête,$cookie_uservautundef.not(undef)renvoietrueet la requête se termine avec le code HTTP 403 ainsi que le corpsnot cookie user.not(0)renvoiefalse. Le bloc ne s'exécute donc pas.not(false):falseétant une valeur fausse,not(false)renvoietrue. Le bloc s'exécute et la requête se termine avec le code HTTP 403.
eq
Signature : eq(arg1: any, arg2: same type as arg1) : Boolean
Vérifie si deux valeurs sont égales.
Paramètres :
arg1: première valeur. Type de données : quelconque.arg2: seconde valeur. Type de données : identique à celui dearg1.
Valeur de retour : true si les deux valeurs sont égales ; false dans le cas contraire.
Exemple : l'exemple suivant combine eq et ne au sein d'un appel à and(). Consultez la section relative à ne pour obtenir l'explication complète.
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}
ne
Signature : ne(arg1: any, arg2: same type as arg1) : Boolean
Vérifie si deux valeurs sont différentes.
Paramètres :
arg1: première valeur. Type de données : quelconque.arg2: seconde valeur. Type de données : identique à celui dearg1.
Valeur de retour : true si les deux valeurs sont différentes ; false dans le cas contraire.
Exemple : traitez une requête uniquement lorsque deux paramètres de requête sont présents et satisfont des conditions de valeur spécifiques.
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}
Le corps du bloc s'exécute seulement si les quatre conditions suivantes sont remplies :
La requête contient le paramètre
k1.La requête contient le paramètre
k2.La valeur de
k1est égale àvalue1(vérifié pareq).La valeur de
k2est différente devalue2(vérifié parne).
Si la requête ne contient ni k1 ni k2, l'évaluation par court-circuit s'arrête à l'étape 1 ou 2. Par conséquent, ni eq() ni ne() ne sont appelées.
null
Signature : null(v: array | dictionary | string) : Boolean
Vérifie si un type de données est spécifié pour EdgeScript (ES).
Paramètre : v — un tableau, un dictionnaire ou une chaîne. Tout autre type de données renvoie false.
Valeur de retour : booléen.
true— lorsquevest une chaîne vide, ou bien un tableau ou un dictionnaire sans éléments.false— lorsquevest une chaîne non vide, un tableau ou un dictionnaire non vide, ou tout autre type de données.
Exemple :
d = []
say(null(d))
set(d, 1, 'v1')
say(null(d))
say(tostring(null('x')))
say(tostring(null('')))
Sortie :
true
false
false
true
Appelée sur un tableau vide
[],null(d)renvoietrue.Après l'exécution de
set(d, 1, 'v1'), le tableau n'est plus vide etnull(d)renvoie doncfalse.null('x')porte sur une chaîne non vide et renvoiefalse.null('')porte sur une chaîne vide et renvoietrue.