O EdgeScript (ES) oferece seis funções lógicas para criar expressões condicionais em regras de CDN: and, or, not, eq, ne e null. Os três operadores booleanos (and, or, not) aceitam avaliação de curto-circuito. Nesse mecanismo, o motor interrompe a avaliação dos argumentos assim que determina o resultado.
Resumo das funções
|
Função |
Assinatura |
Curto-circuito |
Retorno |
|
|
|
Para no primeiro |
|
|
|
|
Para no primeiro |
|
|
|
|
— |
Valor booleano invertido |
|
|
|
— |
|
|
|
|
— |
|
|
|
|
— |
|
and
Assinatura: and(arg, ...) : Boolean
Executa o operador lógico AND. Quando qualquer argumento resulta em false, a avaliação de curto-circuito interrompe o processo e ignora os argumentos restantes.
Parâmetros: Um ou mais valores de qualquer tipo.
Valor de retorno: true se todos os valores resultarem em true; false se qualquer valor resultar em false.
Exemplo: Defina um cabeçalho de resposta apenas quando um parâmetro de consulta específico estiver presente e corresponder a um determinado valor.
if and($arg_mode, eq($arg_mode, 'set_header')) {
add_rsp_header('USER-DEFINED-1','path1')
}
Caso a solicitação inclua
mode=set_header, a funçãoand()avalia ambas as condições e retornatrue. O sistema define o cabeçalho de respostaUSER-DEFINED-1.Se a solicitação não tiver o parâmetro
mode,$arg_moderesulta emfalse. A avaliação de curto-circuito interrompe a execução,eq()nunca é chamado e o sistema não define o cabeçalho de resposta.
or
Assinatura: or(arg, ...) : Boolean
Executa o operador lógico OR. Assim que qualquer argumento resulta em true, a avaliação de curto-circuito para e ignora os argumentos restantes.
Parâmetros: Um ou mais valores de qualquer tipo.
Valor de retorno: true se algum valor resultar em true; false se todos os valores resultarem em false.
Exemplo: Redirecione solicitações com base no valor do cabeçalho 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')
}
Quando o cabeçalho
Fromforwapoucomos, o sistema redireciona a solicitação (HTTP 302) parahttp://example.com.cn/zt_d/we2015/[wap|comos].Se o cabeçalho
Fromforwap,or()retornatrueimediatamente e ignora a verificação decomos.
not
Assinatura: not(arg) : Boolean
Executa o operador lógico NOT. Os valores undef e false resultam em falso, enquanto outros valores resultam em verdadeiro.
Parâmetro: Exatamente um valor de qualquer tipo.
Valor de retorno: true ou false.
Exemplo: Bloqueie solicitações sem parâmetros obrigatórios ou cookies.
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)— caso a solicitação não tenha o parâmetro de consultakey,$arg_keyseráundef. A funçãonot(undef)retornatruee a solicitação termina com HTTP 403.not($cookie_user)— na ausência do cookiecookie_userna solicitação,$cookie_userassume o valorundef. Comonot(undef)retornatrue, a solicitação termina com HTTP 403 e o corponot cookie user.not(0)— retornafalse. O bloco não executa.not(false)— comofalseé um valor falso,not(false)retornatrue. O bloco executa e encerra com HTTP 403.
eq
Assinatura: eq(arg1: any, arg2: same type as arg1) : Boolean
Compara dois valores para verificar igualdade.
Parâmetros:
arg1: Primeiro valor. Tipo de dados: qualquer.arg2: Segundo valor. Tipo de dados: igual ao dearg1.
Valor de retorno: true se os dois valores forem iguais; false caso contrário.
Exemplo: O exemplo abaixo combina eq e ne dentro de uma chamada and(). Consulte a seção ne para a explicação completa.
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}
ne
Assinatura: ne(arg1: any, arg2: same type as arg1) : Boolean
Verifica se dois valores são diferentes.
Parâmetros:
arg1: Primeiro valor. Tipo de dados: qualquer.arg2: Segundo valor. Tipo de dados: igual ao dearg1.
Valor de retorno: true se os dois valores forem diferentes; false caso contrário.
Exemplo: Processe a solicitação apenas quando ambos os parâmetros de consulta estiverem presentes e atenderem a condições 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')
}
Para que o corpo execute, todas as quatro condições devem ser verdadeiras:
A solicitação contém o parâmetro
k1.A solicitação contém o parâmetro
k2.O valor de
k1é igual avalue1(verificado poreq).O valor de
k2difere devalue2(verificado porne).
Caso falte k1 ou k2 na solicitação, a avaliação de curto-circuito para na etapa 1 ou 2. Consequentemente, o sistema não chama eq() nem ne().
null
Assinatura: null(v: array | dictionary | string) : Boolean
Verifica se um tipo de dados está especificado para o EdgeScript (ES).
Parâmetro: v — um array, dicionário ou string. Passar qualquer outro tipo de dados retorna false.
Valor de retorno: Booleano.
true— casovseja uma string vazia, ou um array ou dicionário sem elementos.false— quandovfor uma string não vazia, um array ou dicionário não vazio, ou qualquer outro tipo de dados.
Exemplo:
d = []
say(null(d))
set(d, 1, 'v1')
say(null(d))
say(tostring(null('x')))
say(tostring(null('')))
Saída:
true
false
false
true
A chamada
null(d)em um array vazio[]retornatrue.Após executar
set(d, 1, 'v1'), o array deixa de estar vazio, entãonull(d)retornafalse.null('x')— string não vazia — retornafalse.null('')— string vazia — retornatrue.