Tous les produits
Search
Centre de documentation

ApsaraVideo VOD:Fonctions de traitement des requêtes

Dernière mise à jour :Aug 27, 2026

EdgeScript fournit des fonctions intégrées pour manipuler les en-têtes HTTP des requêtes et des réponses, réécrire ou rediriger les URI, générer le corps des réponses et définir des cookies. Cette rubrique décrit la syntaxe, les paramètres, les valeurs de retour et des exemples pour chaque fonction.

Accès rapide :

En-têtes de requête

add_req_header

Ajoute un en-tête à la requête avant sa transmission au serveur d'origine.

Syntaxe

add_req_header(name, value [, append])

Paramètres

Paramètre

Type

Obligatoire

Description

name

string

Oui

Nom de l'en-tête de requête à ajouter.

value

string

Oui

Valeur de l'en-tête de requête à ajouter.

append

Boolean

Non

Indique s'il faut ajouter l'en-tête si un en-tête portant le même nom existe déjà. Valeur par défaut : false. Si la valeur est false, la nouvelle valeur remplace la valeur existante.

Valeur de retour

Renvoie true par défaut. Renvoie false si le nom de l'en-tête n'est pas valide.

Exemple

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')

Résultat : le serveur d'origine reçoit les en-têtes suivants :

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

L'en-tête USER-DEFINED-REQ-2 est ajouté puis supprimé ; il n'est donc pas transmis au serveur d'origine.

del_req_header

Supprime un en-tête de requête avant sa transmission au serveur d'origine.

Syntaxe

del_req_header(name)

Paramètres

Paramètre

Type

Obligatoire

Description

name

string

Oui

Nom de l'en-tête de requête à supprimer.

Valeur de retour

Renvoie true par défaut. Renvoie false si le nom de l'en-tête n'est pas valide.

Exemple

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')

Résultat : le serveur d'origine reçoit les en-têtes suivants :

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

L'en-tête USER-DEFINED-REQ-2 est ajouté puis supprimé ; il n'est donc pas transmis au serveur d'origine.

En-têtes de réponse

add_rsp_header

Ajoute un en-tête à la réponse.

Syntaxe

add_rsp_header(name, value [, append])

Paramètres

Paramètre

Type

Obligatoire

Description

name

string

Oui

Nom de l'en-tête de réponse à ajouter.

value

string

Oui

Valeur de l'en-tête de réponse à ajouter. Prend en charge les expressions dynamiques : ${x} est remplacé par la valeur de ngx.var.x ; @{y} est remplacé par la valeur de l'en-tête de réponse y.

append

Boolean

Non

Indique s'il faut ajouter l'en-tête si un en-tête portant le même nom existe déjà. Valeur par défaut : false. Si la valeur est false, la nouvelle valeur remplace la valeur existante.

Valeur de retour

Renvoie true par défaut. Renvoie false si le nom de l'en-tête n'est pas valide.

Exemple

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')

Résultat : la réponse inclut les en-têtes suivants :

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

L'en-tête USER-DEFINED-RSP-2 est ajouté puis supprimé ; il n'est donc pas inclus dans la réponse.

del_rsp_header

Supprime un en-tête de réponse.

Syntaxe

del_rsp_header(name)

Paramètres

Paramètre

Type

Obligatoire

Description

name

string

Oui

Nom de l'en-tête de réponse à supprimer.

Valeur de retour

Renvoie true par défaut. Renvoie false si le nom de l'en-tête n'est pas valide.

Exemple

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')

Résultat : la réponse inclut les en-têtes suivants :

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

L'en-tête USER-DEFINED-RSP-2 est ajouté puis supprimé ; il n'est donc pas inclus dans la réponse.

get_rsp_header

Récupère la valeur d'un en-tête de réponse.

Syntaxe

get_rsp_header(str)

Paramètres

Paramètre

Type

Obligatoire

Description

str

string

Oui

Nom de l'en-tête de réponse à récupérer.

Valeur de retour

  • Si l'en-tête existe : renvoie la valeur de l'en-tête sous forme de chaîne, de nombre, de dictionnaire ou de booléen.

  • Si l'en-tête n'existe pas : renvoie false.

Exemple

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

Réécriture d'URL et redirection

rewrite

Réécrit l'URI ou redirige la requête.

Syntaxe

rewrite(url, flag, code)

Paramètres

Paramètre

Type

Obligatoire

Description

url

string

Oui

URI ou URL cible après la réécriture ou la redirection.

flag

string

Oui

Mode de réécriture. Consultez le tableau de référence des indicateurs ci-dessous.

code

numeric

Non

Code d'état HTTP pour la redirection. S'applique uniquement lorsque flag est défini sur redirect ou enhance_redirect. Valeurs valides : 301, 302, 303, 307, 308. Valeur par défaut : 302.

Référence des indicateurs (flag)

Utilisez ce tableau pour choisir l'indicateur adapté à votre cas d'utilisation :

URI uniquement

URI + paramètres de requête

Réécriture côté serveur (pas de redirection, l'URL dans le navigateur reste inchangée)

break

enhance_break

Redirection côté client (le navigateur effectue une nouvelle requête, l'URL change)

redirect

enhance_redirect

Valeur de retour

  • Opération de réécriture (break, enhance_break) : renvoie true.

  • Opération de redirection (redirect, enhance_redirect) : aucune valeur de retour.

Exemples

Réécriture côté serveur (URI + paramètres)

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

Le serveur d'origine reçoit la requête avec l'URI et les paramètres de requête réécrits vers /example/examplefile.txt?k=v.

Redirection côté client (URI + paramètres)

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)
}

Le client reçoit une redirection 302 ou 301 vers /example/examplefile.txt?k=v.

Réécriture côté serveur (URI uniquement)

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

Le serveur d'origine reçoit la requête avec l'URI réécrit vers /example/examplefile.txt. Les paramètres de requête d'origine sont conservés.

Redirection côté client (URI uniquement)

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)
}

Le client reçoit une redirection 302 ou 301 vers /example/examplefile.txt. Les paramètres de requête d'origine sont conservés.

Corps de la réponse

say

Affiche du contenu dans le corps de la réponse et ajoute un caractère de saut de ligne.

Syntaxe

say(arg)

Paramètres

Paramètre

Type

Obligatoire

Description

arg

any

Oui

Contenu à écrire dans le corps de la réponse.

Valeur de retour

Aucune.

Exemple

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

Sortie :

hello
byebyebyebye

print

Affiche du contenu dans le corps de la réponse sans ajouter de caractère de saut de ligne.

Syntaxe

print(arg)

Paramètres

Paramètre

Type

Obligatoire

Description

arg

any

Oui

Contenu à écrire dans le corps de la réponse.

Valeur de retour

Aucune.

Exemple

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

Sortie :

hello
byebyebyebye

exit

Met fin à la requête actuelle avec le code d'état HTTP spécifié et un corps de réponse facultatif.

Syntaxe

exit(code [, body])

Paramètres

Paramètre

Type

Obligatoire

Description

code

numeric

Oui

Code d'état HTTP à renvoyer.

body

any

Non

Corps de réponse à inclure dans la réponse.

Valeur de retour

Aucune.

Exemples

Exemple 1 : bloquer les requêtes en fonction des paramètres de requête et des cookies

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

Si la requête n'inclut pas le paramètre de requête key, le nœud CDN renvoie le code HTTP 403.

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

Si la requête n'inclut pas le cookie user, le nœud CDN renvoie le code HTTP 403 avec le corps de réponse not cookie user.

if not(0) {
    exit(403)
}

L'expression not(0) est évaluée à false, ce bloc ne s'exécute donc pas.

if not(false) {
    exit(403)
}

L'expression not(false) est évaluée à true, le nœud CDN renvoie donc le code HTTP 403.

Exemple 2 : authentification basée sur l'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)
}

Cet exemple extrait des segments de l'URI de la requête, calcule un condensé MD5 et le valide par rapport à une signature intégrée. Si l'URI est mal formé ou si le condensé ne correspond pas, le nœud CDN renvoie le code HTTP 403 avec un en-tête d'erreur.

Cookies

add_rsp_cookie

Définit un cookie dans la réponse. Chaque appel génère un nouvel en-tête de réponse Set-Cookie.

Syntaxe

add_rsp_cookie(k, v [, properties])

Paramètres

Paramètre

Type

Obligatoire

Description

k

string

Oui

Nom du cookie.

v

string

Oui

Valeur du cookie.

properties

dictionary

Non

Attributs du cookie tels que path, domain, secure, httponly, expires, max_age, samesite et extension. Pour la référence complète des attributs, consultez Set-Cookie.

Valeur de retour

Renvoie true si le cookie est défini. Renvoie false si le cookie n'a pas pu être défini.

Exemple

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'
])

La réponse inclut les en-têtes Set-Cookie suivants :

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

Encodage

encode_args

Convertit les paires clé-valeur d'un dictionnaire en une chaîne encodée pour URI au format k1=v1&k2=v2.

Syntaxe

encode_args(d)

Paramètres

Paramètre

Type

Obligatoire

Description

d

dictionary

Oui

Dictionnaire à encoder.

Valeur de retour

Renvoie une chaîne encodée pour URI.

Exemple

Les fonctions encode_args et decode_args sont généralement utilisées conjointement. L'exemple suivant encode un dictionnaire, le définit comme en-tête de réponse, puis le décode et lit les valeurs individuelles :

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'))
}

La réponse inclut les en-têtes suivants :

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

Convertit une chaîne encodée pour URI au format k1=v1&k2=v2 en un dictionnaire.

Syntaxe

decode_args(s)

Paramètres

Paramètre

Type

Obligatoire

Description

s

string

Oui

Chaîne encodée pour URI à décoder.

Valeur de retour

Renvoie un dictionnaire converti à partir de la chaîne.

Exemple

Consultez l'exemple de encode_args ci-dessus. La fonction decode_args est l'opération inverse et est utilisée conjointement avec encode_args.