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. Dessa forma, o mecanismo interrompe a avaliação dos argumentos assim que o resultado é determinado.
Resumo das funções
|
Função |
Assinatura |
Curto-circuito |
Retorno |
|
|
|
Para no primeiro |
|
|
|
|
Para no primeiro |
|
|
|
|
— |
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_moderesultará emfalse. A avaliação de curto-circuito interrompe o processo —eq()nunca é chamada — e o sistema não define o cabeçalho de resposta.
or
Assinatura: or(arg, ...) : Boolean
Executa o operador lógico OR. Quando qualquer argumento resulta em true, 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 qualquer 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 — o sistema 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 ou cookies obrigatórios.
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)— se a solicitação não tiver o parâmetro de consultakey,$arg_keyseráundef.not(undef)retornatruee a solicitação termina com HTTP 403.not($cookie_user)— caso a solicitação não tenha o cookiecookie_user,$cookie_userseráundef.not(undef)retornatruee a solicitação termina com HTTP 403 e o corponot cookie user.not(0)— retornafalse. O bloco não é executado.not(false)— comofalseé um valor falso,not(false)retornatrue. O bloco executa e termina com HTTP 403.
eq
Assinatura: eq(arg1: any, arg2: same type as arg1) : Boolean
Compara se dois valores são iguais.
Parâmetros:
arg1: O primeiro valor. Tipo de dados: qualquer.arg2: O 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 a seguir combina eq e ne dentro de uma chamada and(). Consulte a seção ne para obter 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
Compara se dois valores são diferentes.
Parâmetros:
arg1: O primeiro valor. Tipo de dados: qualquer.arg2: O segundo valor. Tipo de dados: igual ao dearg1.
Valor de retorno: true se os dois valores forem diferentes; false caso contrário.
Exemplo: Processe uma 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')
}
Todas as quatro condições devem ser verdadeiras para que o corpo seja executado:
A solicitação inclui o parâmetro
k1.A solicitação inclui o parâmetro
k2.O valor de
k1é igual avalue1(verificado poreq).O valor de
k2é diferente devalue2(verificado porne).
Se a solicitação não tiver k1 ou k2, a avaliação de curto-circuito para na etapa 1 ou 2, e nem eq() nem ne() são chamadas.
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— sevfor uma string vazia, ou um array ou dicionário sem elementos.false— sevfor 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
null(d)em um array vazio[]retornatrue.Após
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.