EdgeScript (ES) propose 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 en court-circuit : le moteur cesse d'évaluer les 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 un argument au moins est vrai |
not |
not(arg) : Boolean |
— | Booléen inversé |
eq |
eq(arg1, arg2) : Boolean |
— | true si égaux |
ne |
ne(arg1, arg2) : Boolean |
— | true si différents |
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. Lorsqu'un argument est évalué à false, l'évaluation en 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 sont évaluées à true ; false si une valeur au moins est évaluée à 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.Si la requête ne contient aucun paramètre
mode,$arg_modeest évalué àfalse. L'évaluation en court-circuit s'interrompt :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. Lorsqu'un argument est évalué à true, l'évaluation en 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 une valeur au moins est évaluée à true ; false si toutes les valeurs sont évaluées à 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')
}
Si 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édiatementtrue: la vérification pourcomosest 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 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 requis.
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 aucun paramètre de requêtekey,$arg_keyvautundef.not(undef)renvoietrueet la requête se termine avec le code HTTP 403.not($cookie_user): si la requête ne contient aucun cookiecookie_user,$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 pas.not(false):falseétant falsy,not(false)renvoietrue. Le bloc s'exécute et se termine avec le code HTTP 403.
eq
Signature : eq(arg1: any, arg2: same type as arg1) : Boolean
Compare l'égalité de deux valeurs.
Paramètres :
arg1: première valeur. Type de données : any.arg2: deuxième 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 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
Compare la différence entre deux valeurs.
Paramètres :
arg1: première valeur. Type de données : any.arg2: deuxième 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 : Faites correspondre une requête uniquement lorsque les 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')
}
Les quatre conditions doivent être vraies pour que le corps s'exécute :
La requête inclut le paramètre
k1.La requête inclut 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 pas k1 ou k2, l'évaluation en court-circuit s'interrompt à l'étape 1 ou 2, et ni eq() ni ne() ne sont appelées.
null
Signature : null(v: array | dictionary | string) : Boolean
Vérifie si une valeur est vide pour EdgeScript (ES).
Paramètre : v — un tableau, un dictionnaire ou une chaîne. La transmission de tout autre type de données renvoie false.
Valeur de retour : Booléen.
true: sivest une chaîne vide, ou un tableau ou un dictionnaire sans éléments.false: sivest 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
null(d)sur un tableau vide[]renvoietrue.Après
set(d, 1, 'v1'), le tableau n'est plus vide, doncnull(d)renvoiefalse.null('x')— chaîne non vide — renvoiefalse.null('')— chaîne vide — renvoietrue.