Estas funções inspecionam propriedades da requisição atual, como endereço do servidor, identidade do cliente, componentes da URI, cabeçalhos, cookies e dados geográficos. Use-as no EdgeScript para criar lógicas condicionais de roteamento, controle de acesso e personalização de conteúdo.
Funções que retornam dados geográficos do cliente (client_addr,client_country,client_region,client_isp) podem apresentar valores imprecisos. Endereços de clientes podem ser reescritos por regras NAT de provedores de serviços de Internet (ISP) ou o endereço IP pode estar fora do pool de endereços do Alibaba Cloud CDN.
server_addr
Retorna o endereço IP do nó CDN que recebeu a requisição atual.
Sintaxe
server_addr()
Parâmetros
Nenhum.
Valor de retorno
Endereço IP do servidor. Tipo de dado: string.
Exemplo
s_addr = server_addr()
say(concat('s_addr:', s_addr))
server_port
Retorna a porta do nó CDN que recebeu a requisição atual.
Sintaxe
server_port()
Parâmetros
Nenhum.
Valor de retorno
Porta do servidor. Tipo de dado: numérico.
Exemplo
s_port = server_port()
say(concat('s_port:', tostring(s_port)))
client_addr
Retorna o endereço IP do cliente que enviou a requisição.
Os valores retornados podem não ser precisos. Consulte a nota sobre precisão no início desta página.
Sintaxe
client_addr()
Parâmetros
Nenhum.
Valor de retorno
Endereço IP do cliente. Tipo de dado: string.
Exemplo
c_addr = client_addr()
c_port = client_port()
say(concat('c_addr:', c_addr))
say(concat('c_port:', tostring(c_port)))
client_port
Retorna a porta do cliente que enviou a requisição.
Sintaxe
client_port()
Parâmetros
Nenhum.
Valor de retorno
Porta do cliente. Tipo de dado: numérico.
Exemplo
c_addr = client_addr()
c_port = client_port()
say(concat('c_addr:', c_addr))
say(concat('c_port:', tostring(c_port)))
client_country
Retorna o código do país do cliente. Combine com client_region() e client_isp() para construir lógicas baseadas em geolocalização.
Os valores retornados podem não ser precisos. Consulte a nota sobre precisão no início desta página.
Sintaxe
client_country()
Parâmetros
Nenhum.
Valor de retorno
Código do país do cliente. Tipo de dado: string. Para valores de códigos de país, consulte Códigos de país.
Exemplo
O exemplo abaixo obtém o país, a divisão administrativa e o ISP do cliente e imprime cada valor caso esteja definido.
c_country = client_country()
c_region = client_region()
c_isp = client_isp()
if c_country {
say(concat('client_country:', c_country))
}
if c_region {
say(concat('client_region:', c_region))
}
if c_isp {
say(concat('client_isp:', c_isp))
}
client_region
Retorna o código da divisão administrativa da localização do cliente.
Os valores retornados podem não ser precisos. Consulte a nota sobre precisão no início desta página.
Sintaxe
client_region()
Parâmetros
Nenhum.
Valor de retorno
Código da divisão administrativa do cliente. Tipo de dado: string. Para valores de códigos, consulte Códigos de divisão administrativa.
Exemplo
Consulte o exemplo em client_country.
client_city
Use client_city para retornar o código da cidade do cliente. A tabela abaixo detalha a função.
Item | Descrição |
Sintaxe | client_city() |
Parâmetros | Nenhum |
Exemplo | |
Valor de retorno | Retorna o código da cidade do cliente. O valor retornado é do tipo string.Para informações sobre códigos de cidade, consulte a Tabela de códigos de cidade. |
client_isp
Retorna o código do ISP da rede do cliente.
Os valores retornados podem não ser precisos. Consulte a nota sobre precisão no início desta página.
Sintaxe
client_isp()
Parâmetros
Nenhum.
Valor de retorno
Código do ISP do cliente. Tipo de dado: string. Para valores de códigos, consulte Códigos de ISP.
Exemplo
Consulte o exemplo em client_country.
ip_country
Use ip_country para retornar os códigos de país e região de um IP especificado. A tabela abaixo detalha a função.
Item | Descrição |
Sintaxe | ip_country(ipaddr) |
Parâmetros | ipaddr: string IP em notação decimal pontuada. |
Exemplo | |
Valor de retorno | Retorna os códigos de país e região do IP especificado. O valor retornado é do tipo string.Para informações sobre códigos de país e região, consulte a Tabela de códigos de país. |
ip_region
Retorna o código da divisão administrativa da cidade ou província à qual um determinado endereço IP pertence.
Sintaxe
ip_region(ipaddr)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Um endereço IP em notação decimal pontuada, por exemplo, |
Valor de retorno
Código da divisão administrativa da cidade ou província. Tipo de dado: string. Para valores de códigos, consulte Códigos de divisão administrativa.
Exemplo
Consulte o exemplo em ip_country.
ip_city
Use ip_city para retornar o código da cidade de um IP especificado. A tabela abaixo detalha a função.
Item | Descrição |
Sintaxe | ip_city(ipaddr) |
Parâmetros | ipaddr: string IP em notação decimal pontuada. |
Exemplo | |
Valor de retorno | Retorna o código da cidade do cliente. O valor retornado é do tipo string.Para informações sobre códigos de cidade, consulte a Tabela de códigos de cidade. |
ip_isp
Retorna o código do ISP para um determinado endereço IP.
Sintaxe
ip_isp(ipaddr)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Um endereço IP em notação decimal pontuada, por exemplo, |
Valor de retorno
Código do ISP do endereço IP. Tipo de dado: string. Para valores de códigos, consulte Códigos de ISP.
Exemplo
Consulte o exemplo em ip_country.
req_uri
Retorna a URI da requisição, excluindo parâmetros de consulta. Quando chamada com um argumento pattern, compara a URI com o padrão fornecido.
Sintaxe
req_uri([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: a URI da requisição. Tipo de dado: string.Com
pattern:truese a URI corresponder; caso contrário,false.
Exemplo
# req_uri
say(concat('req_uri: ', req_uri()))
if req_uri('/path1/path2') {
say('req_uri: plain match')
}
if req_uri('re:/path[0-9]/path[0-9]') {
say('req_uri: regex match')
}
Para a requisição GET /path1/path2?mode=ip, a saída é:
req_uri: /path1/path2
req_uri: plain match
req_uri: regex match
req_uri_basename
Retorna o nome do arquivo na URI da requisição, sem a extensão. Quando chamada com um argumento pattern, compara o nome do arquivo com o padrão fornecido.
O nome do arquivo corresponde ao último componente do caminho, removendo-se sua extensão. Por exemplo:
/document_detail/30360.html→30360/M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp4→2-1_g/tarball/foo.tar.bz2→foo
Sintaxe
req_uri_basename([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: o nome do arquivo. Tipo de dado: string.Com
pattern:truese o nome do arquivo corresponder; caso contrário,false.
Exemplo
# req_uri_basename
basename = req_uri_basename()
say(concat('req_uri_basename: ', basename, ' ', len(basename)))
if req_uri_basename('foo') {
say('req_uri_basename: plain match')
}
if req_uri_basename('re:^f.*') {
say('req_uri_basename: regex match')
}
Para a requisição GET /path1/path2/foo.tar.bz2, a saída é:
req_uri_basename: foo 3
req_uri_basename: plain match
req_uri_basename: regex match
req_uri_ext
Retorna a extensão do arquivo na URI da requisição. Quando chamada com um argumento pattern, compara a extensão com o padrão fornecido.
A extensão inclui o ponto inicial. Para extensões compostas, o sufixo completo é retornado. Por exemplo:
/document_detail/30360.html→.html/M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp4→.mp4/tarball/foo.tar.bz2→.tar.bz2
Sintaxe
req_uri_ext([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: a extensão do arquivo. Tipo de dado: string.Com
pattern:truese a extensão corresponder; caso contrário,false.
Exemplo
# req_uri_ext
ext = req_uri_ext()
say(concat('req_uri_ext: ', ext, ' ', len(ext)))
if req_uri_ext('.tar.bz2') {
say('req_uri_ext: plain match')
}
if req_uri_ext('re:\.tar\.bz[0-2]') {
say('req_uri_ext: regex match')
}
Para a requisição GET /path1/path2/foo.tar.bz2, a saída é:
req_uri_ext: .tar.bz2 8
req_uri_ext: plain match
req_uri_ext: regex match
req_uri_seg
Retorna os segmentos de caminho da URI como um dicionário, indexado de 1 em diante, da esquerda para a direita.
Sem
idx: retorna todos os segmentos.Com
idx: retorna os segmentos a partir desse índice (inclusive).
Cada segmento pode conter até 128 caracteres. Caracteres além desse limite são descartados.
Sintaxe
req_uri_seg([idx])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Índice inicial. Os índices começam em |
Valor de retorno
Um dicionário de segmentos de caminho indexado por posição. Verifique cada chave antes de acessá-la, pois chaves ausentes retornam vazio.
Exemplo
# req_uri_seg
def echo_each(k, v, u) {
say(concat(get(u, 'msg'), ' : segs[', k, ']=', v))
}
# fetch all segments
segs = req_uri_seg()
foreach(segs, echo_each, ['msg'='req_uri_seg()'])
# fetch segments from idx 3
segs = req_uri_seg(3)
if get(segs, 3) {
say(concat('req_uri_seg(3): segs[3]=', get(segs, 3)))
}
if get(segs, 4) {
say(concat('req_uri_seg(3): segs[4]=', get(segs, 4)))
}
if get(segs, 5) {
say(concat('req_uri_seg(3): segs[5]=', get(segs, 5)))
}
Para a requisição GET /path1/path2/path3/path4?mode=req2, a saída é:
req_uri_seg() : segs[1]=path1
req_uri_seg() : segs[2]=path2
req_uri_seg() : segs[3]=path3
req_uri_seg() : segs[4]=path4
req_uri_seg(3): segs[3]=path3
req_uri_seg(3): segs[4]=path4
req_uri_arg
Retorna o valor de um parâmetro de consulta nomeado. Quando chamada com um argumento pattern, compara o valor do parâmetro com o padrão fornecido.
Sintaxe
req_uri_arg(name, [pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome do parâmetro de consulta. |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
-
Sem
pattern:Parâmetro existe: o valor do parâmetro. Tipo de dado: string.
Parâmetro não encontrado:
false.
-
Com
pattern:Parâmetro existe e valor corresponde:
true.Parâmetro existe, mas valor não corresponde:
false.Parâmetro não encontrado:
false.
Exemplo
# req_uri_arg
uid = req_uri_arg('uid')
if uid {
say(concat('found uid ', uid))
} else {
say('not found uid')
}
uid_chk = req_uri_arg('uid', '058334')
if uid_chk {
say('check uid ok. plain mode')
} else {
say('check uid fail. plain mode')
}
uid_chk = req_uri_arg('uid', 're:[0-9]+')
if uid_chk {
say('check uid ok. regex mode')
} else {
say('check uid fail. regex mode')
}
A saída varia conforme a requisição:
|
Requisição |
Saída |
|
|
|
|
|
|
|
|
|
req_uri_query_string
Retorna a string de consulta completa da requisição, excluindo o caractere inicial ?. Quando chamada com um argumento pattern, compara a string de consulta com o padrão fornecido.
Sintaxe
req_uri_query_string([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: a string de consulta. Tipo de dado: string.Com
pattern:truese a string de consulta corresponder; caso contrário,false.
Exemplo
# req_uri_query_string
say(concat('req_uri_query_string: ', req_uri_query_string()))
if req_uri_query_string('mode=') {
say('check uri query string ok. plain mode')
} else {
say('check uri query string fail. plain mode')
}
if req_uri_query_string('re:mode=[0-9a-z]+') {
say('check uri query string ok. regex mode')
} else {
say('check uri query string fail. regex mode')
}
Para a requisição GET /path1/path2/path3/path4?mode=req5&token=34Deasd#243, a saída é:
req_uri_query_string: mode=req5&token=34Deasd
check uri query string fail. plain mode
check uri query string ok. regex mode
req_scheme
Retorna o esquema da requisição (http ou https). Quando chamada com um argumento pattern, compara o esquema com o padrão fornecido.
Sintaxe
req_scheme([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: o esquema da requisição. Tipo de dado: string.Com
pattern:truese o esquema corresponder; caso contrário,false.
Exemplo
# req_scheme
say(concat('req_scheme: ', req_scheme()))
if req_scheme('https') {
say('check scheme ok. plain mode')
} else {
say('check scheme fail. plain mode')
}
if req_scheme('re:https?') {
say('check scheme ok. regex mode')
} else {
say('check scheme fail. regex mode')
}
Para uma requisição HTTP, a saída é:
req_scheme: http
check scheme fail. plain mode
check scheme ok. regex mode
req_method
Retorna o método HTTP da requisição. Quando chamada com um argumento pattern, compara o método com o padrão fornecido.
Sintaxe
req_method([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: o método HTTP. Tipo de dado: string.Com
pattern:truese o método corresponder; caso contrário,false.
Exemplo
# req_method
say(concat('req_method: ', req_method()))
if req_method('GET') {
say('check method ok. plain mode')
} else {
say('check method fail. plain mode')
}
if req_method('re:(GET|POST)') {
say('check method ok. regex mode')
} else {
say('check method fail. regex mode')
}
Para uma requisição POST, a saída é:
req_method: POST
check method fail. plain mode
check method ok. regex mode
req_host
Retorna o valor do cabeçalho de requisição Host. Quando chamada com um argumento pattern, compara o host com o padrão fornecido.
Sintaxe
req_host([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: o valor do cabeçalhoHost. Tipo de dado: string.Com
pattern:truese o host corresponder; caso contrário,false.
Exemplo
# req_host
say(concat('req_host: ', req_host()))
if req_host('image.developer.aliyundoc.com') {
say('check host ok. plain mode')
} else {
say('check host fail. plain mode')
}
if req_host('re:.+\.y\.z\.com') {
say('check host ok. regex mode')
} else {
say('check host fail. regex mode')
}
Para a requisição Host: image.developer.aliyundoc.com, a saída é:
req_host: image.developer.aliyundoc.com
check host fail. plain mode
check host ok. regex mode
req_user_agent
Retorna o valor do cabeçalho de requisição User-Agent. Quando chamada com um argumento pattern, compara o valor com o padrão fornecido.
Sintaxe
req_user_agent([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: o valor do cabeçalhoUser-Agent. Tipo de dado: string.Com
pattern:truese o valor corresponder; caso contrário,false.
Exemplo
# req_user_agent
say(concat('req_user_agent: ', req_user_agent()))
if req_user_agent('Mozilla') {
say('check user_agent ok. plain mode')
} else {
say('check user_agent fail. plain mode')
}
if req_user_agent('re:^Mozilla') {
say('check user_agent ok. regex mode')
} else {
say('check user_agent fail. regex mode')
}
Para a requisição User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64), a saída é:
req_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
check user_agent fail. plain mode
check user_agent ok. regex mode
req_referer
Retorna o valor do cabeçalho de requisição Referer. Quando chamada com um argumento pattern, compara o valor com o padrão fornecido.
Sintaxe
req_referer([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: o valor do cabeçalhoReferer. Tipo de dado: string.Com
pattern:truese o valor corresponder; caso contrário,false.
Exemplo
# req_referer
say(concat('req_referer: ', req_referer()))
if req_referer('https://example.aliyundoc.com/******00003') {
say('check referer ok. plain mode')
} else {
say('check referer fail. plain mode')
}
if req_referer('re:https://foo\.bar\.cn/\*+[0-9]+') {
say('check referer ok. regex mode')
} else {
say('check referer fail. regex mode')
}
Para a requisição Referer: https://example.aliyundoc.com/******00003, a saída é:
req_referer: https://example.aliyundoc.com/******00003
check referer ok. plain mode
check referer fail. regex mode
req_cookie
Retorna o valor de um cookie nomeado. Quando chamada com um argumento pattern, compara o valor do cookie com o padrão fornecido.
Sintaxe
req_cookie(name, [pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome do cookie. |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
-
Sem
pattern:Cookie existe: o valor do cookie. Tipo de dado: string.
Cookie não encontrado:
false.
-
Com
pattern:Cookie existe e valor corresponde:
true.Cookie existe, mas valor não corresponde:
false.Cookie não encontrado:
false.
Exemplo
# req_cookie
uid = req_cookie('uid')
if uid {
say(concat('found cookie uid ', uid))
} else {
say('not found cookie uid')
}
uid_chk = req_cookie('uid', '058334')
if uid_chk {
say('check cookie uid ok. plain mode')
} else {
say('check cookie uid fail. plain mode')
}
uid_chk = req_cookie('uid', 're:^[0-9]+')
if uid_chk {
say('check cookie uid ok. regex mode')
} else {
say('check cookie uid fail. regex mode')
}
Para a requisição Cookie: uid=123456; token=value2, a saída é:
found cookie uid 123456
check cookie uid fail. plain mode
check cookie uid ok. regex mode
req_first_x_forwarded_addr
Retorna o primeiro endereço IP no cabeçalho de requisição X-Forwarded-For. Quando chamada com um argumento pattern, compara o endereço com o padrão fornecido.
Sintaxe
req_first_x_forwarded_addr([pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
Sem
pattern: o primeiro endereço IP no cabeçalhoX-Forwarded-For. Tipo de dado: string.Com
pattern:truese o endereço corresponder; caso contrário,false.
Exemplo
# req_first_x_forwarded
say(concat('req_first_x_forwarded: ', req_first_x_forwarded()))
if req_first_x_forwarded('1.1.1.1') {
say('check first_x_forwarded ok. plain mode')
} else {
say('check first_x_forwarded fail. plain mode')
}
if req_first_x_forwarded('re:1.1.1.[0-9]') {
say('check first_x_forwarded ok. regex mode')
} else {
say('check first_x_forwarded fail. regex mode')
}
Para a requisição X-Forwarded-For: 1.1.X.X, 10.10.10.10, 172.16.0.1, a saída é:
req_first_x_forwarded: 1.1.X.X
check first_x_forwarded ok. plain mode
check first_x_forwarded ok. regex mode
req_header
Retorna o valor de um cabeçalho de requisição nomeado. Quando chamada com um argumento pattern, compara o valor do cabeçalho com o padrão fornecido.
Sintaxe
req_header(name, [pattern])
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome do cabeçalho com hífens substituídos por underscores, em letras minúsculas. Por exemplo, |
|
|
Não |
Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo |
Valor de retorno
-
Sem
pattern:Cabeçalho existe: o valor do cabeçalho. Tipo de dado: string.
Cabeçalho não encontrado:
false.
-
Com
pattern:Cabeçalho existe e valor corresponde:
true.Cabeçalho existe, mas valor não corresponde:
false.Cabeçalho não encontrado:
false.
Exemplo
# req_header
uid = req_header('x_uid')
if uid {
say(concat('found header x-uid ', uid))
} else {
say('not found header x-uid')
}
uid_chk = req_header('x_uid', 'es developer')
if uid_chk {
say('check header x-uid ok. plain mode')
} else {
say('check header x-uid fail. plain mode')
}
uid_chk = req_header('x_uid', 're:es [a-z]+')
if uid_chk {
say('check header x-uid ok. regex mode')
} else {
say('check header x-uid fail. regex mode')
}
Para a requisição X-UID: es developer, a saída é:
found header x-uid es developer
check header x-uid ok. plain mode
check header x-uid ok. regex mode
req_id
Retorna o ID Eagle Eye da requisição. Cada ID Eagle Eye identifica exclusivamente uma única requisição.
Sintaxe
req_id()
Parâmetros
Nenhum.
Valor de retorno
ID da requisição. Tipo de dado: string.
Exemplo
# req_id
say(concat('req_id: ', req_id()))
Exemplo de saída: req_id: 6451c43d15815890089411000e