EdgeScript (ES) proporciona seis funciones lógicas para construir expresiones condicionales en las reglas de CDN: and, or, not, eq, ne y null. Los tres operadores booleanos (and, or y not) admiten evaluación de cortocircuito. Por lo tanto, el motor deja de evaluar los argumentos en cuanto se determina el resultado.
Resumen de funciones
|
Función |
Firma |
Cortocircuito |
Valor devuelto |
|
|
|
Se detiene en el primer |
|
|
|
|
Se detiene en el primer |
|
|
|
|
— |
Valor booleano invertido |
|
|
|
— |
|
|
|
|
— |
|
|
|
|
— |
|
and
Firma: and(arg, ...) : Boolean
Ejecuta el operador lógico AND. Cuando algún argumento se evalúa como false, la evaluación de cortocircuito se detiene y se omiten los argumentos restantes.
Parámetros: uno o más valores de cualquier tipo.
Valor devuelto: true si todos los valores se evalúan como true; false si algún valor se evalúa como false.
Ejemplo: establezca un encabezado de respuesta solo cuando un parámetro de consulta específico esté presente y coincida con un valor determinado.
if and($arg_mode, eq($arg_mode, 'set_header')) {
add_rsp_header('USER-DEFINED-1','path1')
}
Si la solicitud incluye
mode=set_header,and()evalúa ambas condiciones y devuelvetrue. Se establece el encabezado de respuestaUSER-DEFINED-1.Si la solicitud no tiene el parámetro
mode,$arg_modese evalúa comofalse. La evaluación de cortocircuito se detiene, por lo que nunca se llama aeq()y no se establece el encabezado de respuesta.
or
Firma: or(arg, ...) : Boolean
Ejecuta el operador lógico OR. Cuando algún argumento se evalúa como true, la evaluación de cortocircuito se detiene y se omiten los argumentos restantes.
Parámetros: uno o más valores de cualquier tipo.
Valor devuelto: true si algún valor se evalúa como true; false si todos los valores se evalúan como false.
Ejemplo: redirija solicitudes según el valor del encabezado 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 el encabezado
Fromeswapocomos, la solicitud se redirige (HTTP 302) ahttp://example.com.cn/zt_d/we2015/[wap|comos].Si el encabezado
Fromeswap,or()devuelvetruede inmediato y se omite la comprobación decomos.
not
Firma: not(arg) : Boolean
Ejecuta el operador lógico NOT. Los valores undef y false se evalúan como falsos, mientras que los demás se evalúan como verdaderos.
Parámetro: exactamente un valor de cualquier tipo.
Valor devuelto: true o false.
Ejemplo: bloquee las solicitudes a las que les falten parámetros o cookies obligatorios.
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 solicitud no tiene el parámetro de consultakey,$arg_keyesundef.not(undef)devuelvetruey la solicitud finaliza con HTTP 403.not($cookie_user): si la solicitud no tiene la cookiecookie_user,$cookie_useresundef.not(undef)devuelvetruey la solicitud finaliza con HTTP 403 y el cuerponot cookie user.not(0): devuelvefalse. El bloque no se ejecuta.not(false):falsees un valor falso, por lo quenot(false)devuelvetrue. El bloque se ejecuta y finaliza con HTTP 403.
eq
Firma: eq(arg1: any, arg2: same type as arg1) : Boolean
Compara si dos valores son iguales.
Parámetros:
arg1: el primer valor. Tipo de dato: cualquiera.arg2: el segundo valor. Tipo de dato: igual quearg1.
Valor devuelto: true si los dos valores son iguales; de lo contrario, false.
Ejemplo: a continuación se combinan eq y ne dentro de una llamada a and(). Consulte la sección de ne para ver la explicación completa.
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}
ne
Firma: ne(arg1: any, arg2: same type as arg1) : Boolean
Compara si dos valores son distintos.
Parámetros:
arg1: el primer valor. Tipo de dato: cualquiera.arg2: el segundo valor. Tipo de dato: igual quearg1.
Valor devuelto: true si los dos valores son distintos; de lo contrario, false.
Ejemplo: procese una solicitud solo cuando ambos parámetros de consulta estén presentes y cumplan con condiciones de valor específicas.
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}
Las cuatro condiciones deben ser verdaderas para que se ejecute el bloque:
La solicitud incluye el parámetro
k1.La solicitud incluye el parámetro
k2.El valor de
k1es igual avalue1(comprobado medianteeq).El valor de
k2es distinto devalue2(comprobado mediantene).
Si a la solicitud le falta k1 o k2, la evaluación de cortocircuito se detiene en el paso 1 o 2. En ese caso, no se llama ni a eq() ni a ne().
null
Firma: null(v: array | dictionary | string) : Boolean
Comprueba si se especificó un tipo de dato para EdgeScript (ES).
Parámetro: v, que corresponde a un arreglo, un diccionario o una cadena. Si pasa cualquier otro tipo de dato, se devuelve false.
Valor devuelto: booleano.
true: sives una cadena vacía, o bien un arreglo o diccionario sin elementos.false: sives una cadena no vacía, un arreglo o diccionario con elementos, o cualquier otro tipo de dato.
Ejemplo:
d = []
say(null(d))
set(d, 1, 'v1')
say(null(d))
say(tostring(null('x')))
say(tostring(null('')))
Salida:
true
false
false
true
null(d)aplicado al arreglo vacío[]devuelvetrue.Después de ejecutar
set(d, 1, 'v1'), el arreglo ya no está vacío, por lo quenull(d)devuelvefalse.null('x'): al tratarse de una cadena no vacía, devuelvefalse.null(''): al tratarse de una cadena vacía, devuelvetrue.