Cette rubrique décrit la syntaxe, les fonctionnalités, les paramètres et les valeurs de retour des fonctions de logique de requête. Elle fournit également des exemples d'utilisation de ces fonctions.
server_addr
Renvoie l'adresse IP du nœud CDN qui a reçu la requête actuelle.
Syntaxe
server_addr()
Paramètres
Aucun.
Valeur de retour
L'adresse IP du serveur. Type de données : chaîne (string).
Exemple
s_addr = server_addr()
say(concat('s_addr:', s_addr))
server_port
Renvoie le port du nœud CDN qui a reçu la requête actuelle.
Syntaxe
server_port()
Paramètres
Aucun.
Valeur de retour
Le port du serveur. Type de données : numérique.
Exemple
s_port = server_port()
say(concat('s_port:', tostring(s_port)))
client_addr
Renvoie l'adresse IP du client qui a envoyé la requête.
Les valeurs de retour peuvent être inexactes. Consultez la note sur la précision en haut de cette page.
Syntaxe
client_addr()
Paramètres
Aucun.
Valeur de retour
L'adresse IP du client. Type de données : chaîne (string).
Exemple
c_addr = client_addr()
c_port = client_port()
say(concat('c_addr:', c_addr))
say(concat('c_port:', tostring(c_port)))
client_port
Renvoie le port du client qui a envoyé la requête.
Syntaxe
client_port()
Paramètres
Aucun.
Valeur de retour
Le port du client. Type de données : numérique.
Exemple
c_addr = client_addr()
c_port = client_port()
say(concat('c_addr:', c_addr))
say(concat('c_port:', tostring(c_port)))
client_region
Cette fonction interroge le code de division administrative d'un client. Le tableau suivant présente les détails relatifs à cette fonction.
Élément | Description |
Syntaxe | client_region() |
Paramètre | Aucun |
Exemples | |
Valeurs de retour | Renvoie le code de division administrative du client spécifié sous forme de chaîne. Pour plus d'informations sur les codes de division administrative, consultez la rubrique Codes de division administrative des subdivisions de niveau préfectoral en Chine. |
client_isp
La valeur de retour peut être inexacte, car l'adresse du client peut être modifiée par les règles NAT du fournisseur de services Internet (ISP) ou l'adresse IP ne figure pas dans le pool d'adresses d'Alibaba Cloud CDN. Procédez avec prudence.
Cette fonction interroge le code ISP d'un client. Le tableau suivant présente les détails relatifs à cette fonction.
Élément | Description |
Syntaxe | client_isp() |
Paramètre | Aucun |
Exemples | |
Valeurs de retour | Renvoie le code ISP du client spécifié sous forme de chaîne. Pour plus d'informations sur les codes ISP, consultez la rubrique Codes ISP. |
ip_region
La valeur de retour peut être inexacte, car l'adresse du client peut être modifiée par les règles NAT du fournisseur de services Internet (ISP) ou l'adresse IP ne figure pas dans le pool d'adresses d'Alibaba Cloud CDN. Procédez avec prudence.
Cette fonction interroge le code de division administrative de la ville ou de la province à laquelle appartient une adresse IP spécifiée. Le tableau suivant présente les détails relatifs à cette fonction.
Élément | Description |
Syntaxe | ip_region(ipaddr) |
Paramètre | ipaddr : spécifie une adresse IP en notation décimale pointée. |
Exemples | |
Valeurs de retour | Renvoie le code de division administrative de la ville ou de la province à laquelle appartient l'adresse IP spécifiée, sous forme de chaîne. Pour plus d'informations sur les codes de région, consultez la rubrique Codes de division administrative des subdivisions de niveau préfectoral en Chine. |
ip_isp
La valeur de retour peut être inexacte, car l'adresse du client peut être modifiée par les règles NAT du fournisseur de services Internet (ISP) ou l'adresse IP ne figure pas dans le pool d'adresses d'Alibaba Cloud CDN. Procédez avec prudence.
Cette fonction interroge le code ISP d'une adresse IP spécifiée. Le tableau suivant présente les détails relatifs à cette fonction.
Élément | Description |
Syntaxe | ip_isp(ipaddr) |
Paramètre | ipaddr : spécifie une adresse IP en notation décimale pointée. |
Exemples | |
Valeurs de retour | Renvoie le code ISP de l'adresse IP spécifiée sous forme de chaîne. Pour plus d'informations sur les codes ISP, consultez la rubrique Codes ISP. |
req_uri
Renvoie l'URI de la requête, à l'exclusion des paramètres de requête. Lorsqu'elle est appelée avec un argument pattern, la fonction compare l'URI au modèle au lieu de renvoyer l'URI.
Syntaxe
req_uri([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Un modèle de correspondance. Deux types de correspondance sont pris en charge : la correspondance exacte (par défaut) et l'expression régulière (préfixez le modèle par `re:`).
|
Valeur de retour
Sans
pattern: l'URI de la requête. Type de données : chaîne (string).Avec
pattern:truesi l'URI correspond,falsesinon.
Exemple
# 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')
}
Pour la requête GET /path1/path2?mode=ip, la sortie est la suivante :
req_uri: /path1/path2
req_uri: plain match
req_uri: regex match
req_uri_basename
Renvoie le nom de fichier dans l'URI de la requête, sans l'extension de fichier. Lorsqu'elle est appelée avec un argument pattern, la fonction compare le nom de fichier au modèle au lieu de renvoyer le nom.
Le nom de fichier correspond au dernier composant du chemin, débarrassé de son extension. Par exemple :
/document_detail/30360.html→30360/M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp4→2-1_g/tarball/foo.tar.bz2→foo
Syntaxe
req_uri_basename([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Un modèle de correspondance. Deux types de correspondance sont pris en charge : la correspondance exacte (par défaut) et l'expression régulière (préfixez le modèle par `re:`).
|
Valeur de retour
Sans
pattern: le nom de fichier. Type de données : chaîne (string).Avec
pattern:truesi le nom de fichier correspond,falsesinon.
Exemple
# 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')
}
Pour la requête GET /path1/path2/foo.tar.bz2, la sortie est la suivante :
req_uri_basename: foo 3
req_uri_basename: plain match
req_uri_basename: regex match
req_uri_ext
Renvoie l'extension du fichier présente dans l'URI de la requête. Si vous fournissez un argument pattern, la fonction compare l'extension au modèle spécifié.
L'extension inclut le point initial. Pour les extensions composées, le suffixe complet est renvoyé. Exemples :
/document_detail/30360.html→.html/M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp4→.mp4/tarball/foo.tar.bz2→.tar.bz2
Syntaxe
req_uri_ext([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Modèle de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le modèle avec `re:`).
|
Valeur de retour
Sans
pattern: l'extension du fichier. Type de données : chaîne de caractères.Avec
pattern:truesi l'extension correspond,falsesinon.
Exemple
# 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')
}
Pour la requête GET /path1/path2/foo.tar.bz2, le résultat est le suivant :
req_uri_ext: .tar.bz2 8
req_uri_ext: plain match
req_uri_ext: regex match
req_uri_seg
Renvoie les segments du chemin d'URI sous forme de dictionnaire, indexés à partir de 1, de gauche à droite.
Sans
idx: renvoie tous les segments.Avec
idx: renvoie les segments à partir de cet index (inclus).
Chaque segment peut contenir jusqu'à 128 caractères. Les caractères dépassant cette limite sont ignorés.
Syntaxe
req_uri_seg([idx])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`idx`
|
Non
|
Index de départ. Les index commencent à `1`.
|
Valeur de retour
Un dictionnaire des segments de chemin indexés. Vérifiez l'existence de chaque clé avant d'y accéder, car les clés manquantes renvoient une valeur vide.
Exemple
# 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)))
}
Pour la requête GET /path1/path2/path3/path4?mode=req2, le résultat est le suivant :
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
Renvoie la valeur d'un paramètre de requête nommé. Si vous fournissez un argument pattern, la fonction compare la valeur du paramètre au modèle spécifié.
Syntaxe
req_uri_arg(name, [pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`name`
|
Oui
|
Nom du paramètre de requête.
| |
`pattern`
|
Non
|
Modèle de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le modèle avec `re:`).
|
Valeur de retour
-
Sans
pattern:Si le paramètre existe : la valeur du paramètre. Type de données : chaîne de caractères.
Si le paramètre est introuvable :
false.
-
Avec
pattern:Si le paramètre existe et que la valeur correspond :
true.Si le paramètre existe mais que la valeur ne correspond pas :
false.Si le paramètre est introuvable :
false.
Exemple
# 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')
}
Le résultat varie selon la requête :
|**Requête**
|
**Résultat**
| | --- | --- | |
`/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
Renvoie la chaîne de requête complète de la requête, sans le caractère ? initial. Si vous fournissez un argument pattern, la fonction compare la chaîne de requête au modèle spécifié.
Syntaxe
req_uri_query_string([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Modèle de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le modèle avec `re:`).
|
Valeur de retour
Sans
pattern: la chaîne de requête. Type de données : chaîne de caractères.Avec
pattern:truesi la chaîne de requête correspond,falsesinon.
Exemple
# 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')
}
Pour la requête GET /path1/path2/path3/path4?mode=req5&token=34Deasd#243, le résultat est le suivant :
req_uri_query_string: mode=req5&token=34Deasd
check uri query string fail. plain mode
check uri query string ok. regex mode
req_scheme
Renvoie le schéma de la requête (http ou https). Si vous fournissez un argument pattern, la fonction compare le schéma au modèle spécifié.
Syntaxe
req_scheme([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Modèle de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le modèle avec `re:`).
|
Valeur de retour
Sans
pattern: le schéma de la requête. Type de données : chaîne de caractères.Avec
pattern:truesi le schéma correspond,falsesinon.
Exemple
# 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')
}
Pour une requête HTTP, le résultat est le suivant :
req_scheme: http
check scheme fail. plain mode
check scheme ok. regex mode
req_method
Renvoie la méthode HTTP de la requête. Si vous fournissez un argument pattern, la fonction compare la méthode au modèle spécifié.
Syntaxe
req_method([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Modèle de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le modèle avec `re:`).
|
Valeur de retour
Sans
pattern: la méthode HTTP. Type de données : chaîne de caractères.Avec
pattern:truesi la méthode correspond,falsesinon.
Exemple
# 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')
}
Pour une requête POST, le résultat est le suivant :
req_method: POST
check method fail. plain mode
check method ok. regex mode
req_host
Renvoie la valeur de l'en-tête de requête Host . Si vous fournissez un argument pattern, la fonction compare l'hôte au modèle spécifié.
Syntaxe
req_host([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Modèle de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le modèle avec `re:`).
|
Valeur de retour
Sans
pattern: la valeur de l'en-têteHost. Type de données : chaîne de caractères.Avec
pattern:truesi l'hôte correspond,falsesinon.
Exemple
# 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')
}
Pour la requête Host: image.developer.aliyundoc.com, le résultat est le suivant :
req_host: image.developer.aliyundoc.com
check host fail. plain mode
check host ok. regex mode
req_user_agent
Renvoie la valeur de l'en-tête de requête User-Agent. Si vous spécifiez un argument pattern, la fonction compare la valeur au motif fourni.
Syntaxe
req_user_agent([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Motif de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le motif avec `re:`).
|
Valeur de retour
Sans
pattern: la valeur de l'en-têteUser-Agent. Type de données : chaîne.Avec
pattern:truesi la valeur correspond,falsesinon.
Exemple
# 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')
}
Pour la requête User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64), le résultat est le suivant :
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
Renvoie la valeur de l'en-tête de requête Referer. Si vous spécifiez un argument pattern, la fonction compare la valeur au motif fourni.
Syntaxe
req_referer([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Motif de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le motif avec `re:`).
|
Valeur de retour
Sans
pattern: la valeur de l'en-têteReferer. Type de données : chaîne.Avec
pattern:truesi la valeur correspond,falsesinon.
Exemple
# 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')
}
Pour la requête Referer: https://example.aliyundoc.com/******00003, le résultat est le suivant :
req_referer: https://example.aliyundoc.com/******00003
check referer ok. plain mode
check referer fail. regex mode
req_cookie
Renvoie la valeur d'un cookie nommé. Si vous spécifiez un argument pattern, la fonction compare la valeur du cookie au motif fourni.
Syntaxe
req_cookie(name, [pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`name`
|
Oui
|
Nom du cookie.
| |
`pattern`
|
Non
|
Motif de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le motif avec `re:`).
|
Valeur de retour
-
Sans
pattern:Si le cookie existe : la valeur du cookie. Type de données : chaîne.
Si le cookie est introuvable :
false.
-
Avec
pattern:Si le cookie existe et que la valeur correspond :
true.Si le cookie existe mais que la valeur ne correspond pas :
false.Si le cookie est introuvable :
false.
Exemple
# 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')
}
Pour la requête Cookie: uid=123456; token=value2, le résultat est le suivant :
found cookie uid 123456
check cookie uid fail. plain mode
check cookie uid ok. regex mode
req_first_x_forwarded_addr
Renvoie la première adresse IP de l'en-tête de requête X-Forwarded-For. Si vous spécifiez un argument pattern, la fonction compare l'adresse au motif fourni.
Syntaxe
req_first_x_forwarded_addr([pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`pattern`
|
Non
|
Motif de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le motif avec `re:`).
|
Valeur de retour
Sans
pattern: la première adresse IP de l'en-têteX-Forwarded-For. Type de données : chaîne.Avec
pattern:truesi l'adresse correspond,falsesinon.
Exemple
# 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')
}
Pour la requête X-Forwarded-For: 1.1.X.X, 10.10.10.10, 172.16.0.1, le résultat est le suivant :
req_first_x_forwarded: 1.1.X.X
check first_x_forwarded ok. plain mode
check first_x_forwarded ok. regex mode
req_header
Renvoie la valeur d'un en-tête de requête nommé. Si vous spécifiez un argument pattern, la fonction compare la valeur de l'en-tête au motif fourni.
Syntaxe
req_header(name, [pattern])
Paramètres
|**Paramètre**
|
**Obligatoire**
|
**Description**
| | --- | --- | --- | |
`name`
|
Oui
|
Nom de l'en-tête, en minuscules et avec les traits d'union remplacés par des underscores. Par exemple, `X-USER-ID` devient `x_user_id`.
| |
`pattern`
|
Non
|
Motif de correspondance. Deux types de comparaison sont pris en charge : correspondance exacte (par défaut) et expression régulière (préfixez le motif avec `re:`).
|
Valeur de retour
-
Sans
pattern:Si l'en-tête existe : la valeur de l'en-tête. Type de données : chaîne.
Si l'en-tête est introuvable :
false.
-
Avec
pattern:Si l'en-tête existe et que la valeur correspond :
true.Si l'en-tête existe mais que la valeur ne correspond pas :
false.Si l'en-tête est introuvable :
false.
Exemple
# 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')
}
Pour la requête X-UID: es developer, le résultat est le suivant :
found header x-uid es developer
check header x-uid ok. plain mode
check header x-uid ok. regex mode
req_id
Renvoie l'ID Eagle Eye de la requête. Chaque ID Eagle Eye identifie de manière unique une seule requête.
Syntaxe
req_id()
Paramètres
Aucun.
Valeur de retour
ID de la requête. Type de données : chaîne.
Exemple
# req_id
say(concat('req_id: ', req_id()))
Exemple de sortie : req_id: 6451c43d15815890089411000e