Todos os produtos
Search
Central de documentação

CDN:Funções de lógica de requisição

Última atualização: Jul 04, 2026

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.

Importante

Funções que retornam dados geográficos do cliente (client_addr, client_country, client_region, client_isp) podem apresentar valores imprecisos. Regras NAT do provedor de serviços de Internet (ISP) podem reescrever endereços de clientes, 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 os valores dos 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 os valores dos códigos, consulte Códigos de divisão administrativa.

Exemplo

Consulte o exemplo em client_country.

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 os valores dos códigos, consulte Códigos de ISP.

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

ipaddr

Endereço IP em notação decimal pontuada, por exemplo, 192.168.0.1.

Valor de retorno

Código da divisão administrativa da cidade ou província. Tipo de dado: string. Para os valores dos códigos, consulte Códigos de divisão administrativa.

ip_isp

Retorna o código do ISP para um determinado endereço IP.

Sintaxe

ip_isp(ipaddr)

Parâmetros

Parâmetro

Descrição

ipaddr

Endereço IP em notação decimal pontuada, por exemplo, 192.168.0.1.

Valor de retorno

Código do ISP do endereço IP. Tipo de dado: string. Para os valores dos códigos, consulte Códigos de ISP.

req_uri

Retorna a URI da requisição, excluindo os parâmetros de consulta. Quando chamada com um argumento pattern, compara a URI com o padrão especificado.

Sintaxe

req_uri([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: a URI da requisição. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

O nome do arquivo corresponde ao último componente do caminho, removendo-se sua extensão. Por exemplo:

  • /document_detail/30360.html30360

  • /M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp42-1_g

  • /tarball/foo.tar.bz2foo

Sintaxe

req_uri_basename([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: o nome do arquivo. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

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

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: a extensão do arquivo. Tipo de dado: string.

  • Com pattern: true se 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

idx

Não

Índice inicial. Os índices começam em 1.

Valor de retorno

Dicionário de segmentos de caminho indexado por posição. Verifique a existência de 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 especificado.

Sintaxe

req_uri_arg(name, [pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

name

Sim

Nome do parâmetro de consulta.

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern:

    • Parâmetro existente: o valor do parâmetro. Tipo de dado: string.

    • Parâmetro não encontrado: false.

  • Com pattern:

    • Parâmetro existente e valor correspondente: true.

    • Parâmetro existente, mas valor não correspondente: 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

/path1/path2/path3/path4?mode=req4&uid

not found uid / check uid fail. plain mode / check uid fail. regex mode

/path1/path2/path3/path4?mode=req4&uid=

found uid / check uid fail. plain mode / check uid fail. regex mode

/path1/path2/path3/path4?mode=req4&uid=12345

found uid 12345 / check uid fail. plain mode / check uid ok. regex mode

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 especificado.

Sintaxe

req_uri_query_string([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: a string de consulta. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

Sintaxe

req_scheme([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: o esquema da requisição. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

Sintaxe

req_method([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: o método HTTP. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

Sintaxe

req_host([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: o valor do cabeçalho Host. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

Sintaxe

req_user_agent([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: o valor do cabeçalho User-Agent. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

Sintaxe

req_referer([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: o valor do cabeçalho Referer. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

Sintaxe

req_cookie(name, [pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

name

Sim

Nome do cookie.

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern:

    • Cookie existente: o valor do cookie. Tipo de dado: string.

    • Cookie não encontrado: false.

  • Com pattern:

    • Cookie existente e valor correspondente: true.

    • Cookie existente, mas valor não correspondente: 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 especificado.

Sintaxe

req_first_x_forwarded_addr([pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern: o primeiro endereço IP no cabeçalho X-Forwarded-For. Tipo de dado: string.

  • Com pattern: true se 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 especificado.

Sintaxe

req_header(name, [pattern])

Parâmetros

Parâmetro

Obrigatório

Descrição

name

Sim

Nome do cabeçalho com hífens substituídos por underscores, em letras minúsculas. Por exemplo, X-USER-ID torna-se x_user_id.

pattern

Não

Padrão de correspondência. Dois tipos são suportados: correspondência exata (padrão) e expressão regular (adicione o prefixo re: ao padrão).

Valor de retorno

  • Sem pattern:

    • Cabeçalho existente: o valor do cabeçalho. Tipo de dado: string.

    • Cabeçalho não encontrado: false.

  • Com pattern:

    • Cabeçalho existente e valor correspondente: true.

    • Cabeçalho existente, mas valor não correspondente: 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