Todos os produtos
Search
Central de documentação

CDN:Funções de processamento de requisições

Última atualização: Aug 27, 2026

O EdgeScript oferece funções integradas para manipular cabeçalhos de requisição e resposta HTTP, reescrever ou redirecionar URIs, gerar corpos de resposta e definir cookies. Esta referência aborda a sintaxe, os parâmetros, os valores de retorno e exemplos de cada função.

Ir para:

Cabeçalhos de requisição

add_req_header

Adiciona um cabeçalho de requisição antes do encaminhamento ao servidor de origem.

Sintaxe

add_req_header(name, value [, append])

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

name

string

Sim

Nome do cabeçalho de requisição a adicionar.

value

string

Sim

Valor do cabeçalho de requisição a adicionar.

append

Boolean

Não

Indica se o cabeçalho deve ser anexado caso já exista outro com o mesmo nome. Padrão: false. Se for false, o novo valor substitui o existente.

Valor de retorno

Retorna true por padrão. Retorna false se o nome do cabeçalho for inválido.

Exemplo

add_req_header('USER-DEFINED-REQ-1', '1')
add_req_header('USER-DEFINED-REQ-1', 'x', true)
add_req_header('USER-DEFINED-REQ-2', '2')
del_req_header('USER-DEFINED-REQ-2')

Resultado: o servidor de origem recebe os seguintes cabeçalhos:

USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x

O cabeçalho USER-DEFINED-REQ-2 é adicionado e depois excluído; portanto, não é encaminhado ao servidor de origem.

del_req_header

Exclua um cabeçalho de requisição antes do encaminhamento ao servidor de origem.

Sintaxe

del_req_header(name)

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

name

string

Sim

Nome do cabeçalho de requisição a excluir.

Valor de retorno

Retorna true por padrão. Retorna false se o nome do cabeçalho for inválido.

Exemplo

add_req_header('USER-DEFINED-REQ-1', '1')
add_req_header('USER-DEFINED-REQ-1', 'x', true)
add_req_header('USER-DEFINED-REQ-2', '2')
del_req_header('USER-DEFINED-REQ-2')

Resultado: o servidor de origem recebe os seguintes cabeçalhos:

USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x

O cabeçalho USER-DEFINED-REQ-2 é adicionado e depois excluído; portanto, não é encaminhado ao servidor de origem.

Cabeçalhos de resposta

add_rsp_header

Adiciona um cabeçalho de resposta.

Sintaxe

add_rsp_header(name, value [, append])

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

name

string

Sim

Nome do cabeçalho de resposta a adicionar.

value

string

Sim

Valor do cabeçalho de resposta a adicionar. Aceita expressões dinâmicas: ${x} é substituído pelo valor de ngx.var.x; @{y} é substituído pelo valor do cabeçalho de resposta y.

append

Boolean

Não

Indica se o cabeçalho deve ser anexado caso já exista outro com o mesmo nome. Padrão: false. Se for false, o novo valor substitui o existente.

Valor de retorno

Retorna true por padrão. Retorna false se o nome do cabeçalho for inválido.

Exemplo

add_rsp_header('USER-DEFINED-RSP-1', '1')
add_rsp_header('USER-DEFINED-RSP-1', 'x', true)
add_rsp_header('USER-DEFINED-RSP-2', '2')
del_rsp_header('USER-DEFINED-RSP-2')

Resultado: a resposta inclui os seguintes cabeçalhos:

USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x

O cabeçalho USER-DEFINED-RSP-2 é adicionado e depois excluído; portanto, não consta na resposta.

del_rsp_header

Exclua um cabeçalho de resposta.

Sintaxe

del_rsp_header(name)

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

name

string

Sim

Nome do cabeçalho de resposta a excluir.

Valor de retorno

Retorna true por padrão. Retorna false se o nome do cabeçalho for inválido.

Exemplo

add_rsp_header('USER-DEFINED-RSP-1', '1')
add_rsp_header('USER-DEFINED-RSP-1', 'x', true)
add_rsp_header('USER-DEFINED-RSP-2', '2')
del_rsp_header('USER-DEFINED-RSP-2')

Resultado: a resposta inclui os seguintes cabeçalhos:

USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x

O cabeçalho USER-DEFINED-RSP-2 é adicionado e depois excluído; portanto, não consta na resposta.

get_rsp_header

Recupera o valor de um cabeçalho de resposta.

Sintaxe

get_rsp_header(str)

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

str

string

Sim

Nome do cabeçalho de resposta a recuperar.

Valor de retorno

  • Se o cabeçalho existir: retorna o valor como string, número, dicionário ou Boolean.

  • Se o cabeçalho não existir: retorna false.

Exemplo

ct = get_rsp_header('content-type')
if ct {
    add_rsp_header('origin-content-type', 'is')
} else {
    add_rsp_header('origin-content-type', 'no')
}

Reescrita e redirecionamento de URL

rewrite

Reescreve a URI ou redireciona a requisição.

Sintaxe

rewrite(url, flag, code)

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

url

string

Sim

URI ou URL de destino após a reescrita ou o redirecionamento.

flag

string

Sim

Modo de reescrita. Consulte a tabela de referência de flags abaixo.

code

numeric

Não

Código de status HTTP para o redirecionamento. Aplica-se apenas quando flag é redirect ou enhance_redirect. Valores válidos: 301, 302, 303, 307, 308. Padrão: 302.

Referência de flags

Use esta tabela para escolha a flag adequada ao seu caso de uso:

Apenas URI

URI + parâmetros de consulta

Reescrita no servidor (sem redirecionamento, URL no navegador inalterada)

break

enhance_break

Redirecionamento no cliente (navegador faz nova requisição, URL alterada)

redirect

enhance_redirect

Valor de retorno

  • Operação de reescrita (break, enhance_break): retorna true.

  • Operação de redirecionamento (redirect, enhance_redirect): sem valor de retorno.

Exemplos

Reescrita no servidor (URI + parâmetros)

if and($arg_mode, eq($arg_mode, 'rewrite:enhance_break')) {
  rewrite('/example/examplefile.txt?k=v', 'enhance_break')
}

O servidor de origem recebe a requisição com a URI e os parâmetros de consulta reescritos para /example/examplefile.txt?k=v.

Redirecionamento no cliente (URI + parâmetros)

if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect')) {
  rewrite('/example/examplefile.txt?k=v', 'enhance_redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect_301')) {
  rewrite('/example/examplefile.txt?k=v', 'enhance_redirect', 301)
}

O cliente recebe um redirecionamento 302 ou 301 para /example/examplefile.txt?k=v.

Reescrita no servidor (apenas URI)

if and($arg_mode, eq($arg_mode, 'rewrite:break')) {
  rewrite('/example/examplefile.txt', 'break')
}

O servidor de origem recebe a requisição com a URI reescrita para /example/examplefile.txt. Os parâmetros de consulta originais são preservados.

Redirecionamento no cliente (apenas URI)

if and($arg_mode, eq($arg_mode, 'rewrite:redirect')) {
  rewrite('/example/examplefile.txt', 'redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:redirect_301')) {
  rewrite('/example/examplefile.txt', 'redirect', 301)
}

O cliente recebe um redirecionamento 302 ou 301 para /example/examplefile.txt. Os parâmetros de consulta originais são preservados.

Corpo da resposta

say

Imprime conteúdo no corpo da resposta e acrescenta um caractere de nova linha.

Sintaxe

say(arg)

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

arg

any

Sim

Conteúdo a gravar no corpo da resposta.

Valor de retorno

Nenhum.

Exemplo

say('hello')
print('byebye')
print('byebye')

Saída:

hello
byebyebyebye

print

Imprime conteúdo no corpo da resposta sem acrescentar um caractere de nova linha.

Sintaxe

print(arg)

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

arg

any

Sim

Conteúdo a gravar no corpo da resposta.

Valor de retorno

Nenhum.

Exemplo

say('hello')
print('byebye')
print('byebye')

Saída:

hello
byebyebyebye

exit

Encerra a requisição atual com o código de status HTTP especificado e um corpo de resposta opcional.

Sintaxe

exit(code [, body])

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

code

numeric

Sim

Código de status HTTP a retornar.

body

any

Não

Corpo de resposta a incluir na resposta.

Valor de retorno

Nenhum.

Exemplos

Exemplo 1: bloquear requisições com base em parâmetros de consulta e cookies

if not($arg_key) {
    exit(403)
}

Se a requisição não incluir o parâmetro de consulta key, o nó CDN retorna HTTP 403.

if not($cookie_user) {
    exit(403, 'not cookie user')
}

Se a requisição não incluir o cookie user, o nó CDN retorna HTTP 403 com o corpo de resposta not cookie user.

if not(0) {
    exit(403)
}

not(0) resulta em false; portanto, este bloco não é executado.

if not(false) {
    exit(403)
}

not(false) resulta em true; portanto, o nó CDN retorna HTTP 403.

Exemplo 2: autenticação baseada em URI

pcs = capture_re($request_uri,'^/([^/]+)/([^/]+)([^?]+)\?(.*)')
sec1 = get(pcs, 1)
sec2 = get(pcs, 2)
sec3 = get(pcs, 3)
if or(not(sec1), not(sec2), not(sec3)) {
   add_rsp_header('X-TENGINE-ERROR', 'auth failed - missing necessary uri set')
   exit(403)
}
digest = md5(concat(sec1, sec3))
if ne(digest, sec2) {
    add_rsp_header('X-TENGINE-ERROR', 'auth failed - invalid digest')
    exit(403)
}

Este exemplo extrai segmentos da URI da requisição, calcula um resumo MD5 e o valida em relação a uma assinatura incorporada. Se a URI estiver malformada ou o resumo não corresponder, o nó CDN retorna HTTP 403 com um cabeçalho de erro.

Cookies

add_rsp_cookie

Defina um cookie na resposta. Cada chamada gera um novo cabeçalho de resposta Set-Cookie.

Sintaxe

add_rsp_cookie(k, v [, properties])

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

k

string

Sim

Nome do cookie.

v

string

Sim

Valor do cookie.

properties

dictionary

Não

Atributos do cookie, como path, domain, secure, httponly, expires, max_age, samesite e extension. Para a referência completa de atributos, consulte Set-Cookie.

Valor de retorno

Retorna true se o cookie for definido. Retorna false se não for possível definir o cookie.

Exemplo

add_rsp_cookie('user', 'edgescript')

add_rsp_cookie('login_time', tostring(now()), [
    'path' = '/'
])

expires = cookie_time(time())
add_rsp_cookie('psid', 'SDF93745HFSDF2934JKHG', [
    'path' = '/play',
    'domain' = 'foo.com',
    'secure' = true,
    'httponly' = true,
    'expires' = expires,
    'max_age' = 100,
    'samesite' = 'Strict',
    'extension' = 'xxt3s'
])

A resposta inclui os seguintes cabeçalhos Set-Cookie:

Set-Cookie: user=edgescript
Set-Cookie: login_time=1582538968.912; Path=/
Set-Cookie: psid=SDF93745HFSDF2934JKHG; Expires=Mon, 24-Feb-20 10:09:28 GMT; Max-Age=100; Domain=foo.com; Path=/play; Secure; HttpOnly; SameSite=Strict; xxt3s

Codificação

encode_args

Converte pares chave-valor de um dicionário em uma string codificada para URI no formato k1=v1&k2=v2.

Sintaxe

encode_args(d)

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

d

dictionary

Sim

Dicionário a codificar.

Valor de retorno

Retorna uma string codificada para URI.

Exemplo

As funções encode_args e decode_args são geralmente usadas em conjunto. O exemplo a seguir codifica um dicionário, define-o como cabeçalho de resposta e, em seguida, decodifica-o e lê valores individuais:

my_args = []
set(my_args, 'signature', 'da9dc4b7-87ae-4330-aaaf-e5454e2c2af1')
set(my_args, 'algo', 'private sign1')
my_args_str = encode_args(my_args)
add_rsp_header('X-DSL-ENCODE-ARGS', my_args_str)

to_args = decode_args(my_args_str)
if get(to_args, 'algo') {
    add_rsp_header('X-DSL-DECODE-ARGS-ALGO', get(to_args, 'algo'))
}
if get(to_args, 'signature') {
    add_rsp_header('X-DSL-DECODE-ARGS-SIGN', get(to_args, 'signature'))
}

A resposta inclui os seguintes cabeçalhos:

X-DSL-ENCODE-ARGS: signature=da9dc4b7-87ae-4330-aaaf-e5454e2c2af1&algo=private%20sign1
X-DSL-DECODE-ARGS-ALGO: private sign1
X-DSL-DECODE-ARGS-SIGN: da9dc4b7-87ae-4330-aaaf-e5454e2c2af1

decode_args

Converte uma string codificada para URI no formato k1=v1&k2=v2 em um dicionário.

Sintaxe

decode_args(s)

Parâmetros

Parâmetro

Tipo

Obrigatório

Descrição

s

string

Sim

String codificada para URI a decodificar.

Valor de retorno

Retorna um dicionário convertido a partir da string.

Exemplo

Consulte o exemplo de encode_args acima. A função decode_args realiza a operação inversa e é usada em conjunto com encode_args.