Fungsi logika permintaan mengembalikan atribut dari permintaan saat ini, seperti alamat server dan klien, lokasi klien, URI permintaan, serta header permintaan. Bagian berikut menjelaskan sintaksis, parameter, contoh kode, dan nilai kembali setiap fungsi.
Indeks fungsi
Tabel berikut mencantumkan fungsi logika permintaan berdasarkan kategori, nilai yang dikembalikan oleh setiap fungsi, serta parameter yang diterima.
| Kategori | Fungsi | Hasil | Parameter |
| Atribut server | server_addr | Alamat server yang menerima permintaan saat ini. | Tidak ada |
| Atribut server | server_port | Port server yang menerima permintaan saat ini. | Tidak ada |
| Atribut client | client_addr | Alamat IP client. | Tidak ada |
| Atribut client | client_port | Port client. | Tidak ada |
| Geolokasi client | client_country | Kode negara atau wilayah dari alamat IP client. | Tidak ada |
| Geolokasi client | client_region | Kode pembagian administratif (provinsi atau kota) dari alamat IP client. | Tidak ada |
| Geolokasi client | client_city | Kode kota dari alamat IP client. | Tidak ada |
| Geolokasi client | client_isp | Kode ISP dari alamat IP client. | Tidak ada |
| Geolokasi alamat IP tertentu | ip_country | Kode negara atau wilayah dari alamat IP yang ditentukan. | ipaddr |
| Geolokasi alamat IP tertentu | ip_region | Kode pembagian administratif (provinsi atau kota) dari alamat IP yang ditentukan. | ipaddr |
| Geolokasi alamat IP tertentu | ip_city | Kode kota dari alamat IP yang ditentukan. | ipaddr |
| Geolokasi alamat IP tertentu | ip_isp | Kode ISP dari alamat IP yang ditentukan. | ipaddr |
| Penguraian URI | req_uri | URI permintaan, tidak termasuk parameter kueri. | [pattern] |
| Penguraian URI | req_uri_basename | Nama file dalam URI permintaan. | [pattern] |
| Penguraian URI | req_uri_ext | Ekstensi file dalam URI permintaan. | [pattern] |
| Penguraian URI | req_uri_seg | Segmen URI permintaan, dipisahkan berdasarkan garis miring (/). | [idx] |
| Penguraian URI | req_uri_arg | Nilai dari parameter URI tertentu. | name, [pattern] |
| Penguraian URI | req_uri_query_string | Parameter kueri dari permintaan, tidak termasuk tanda tanya (?). | [pattern] |
| Baris permintaan dan header | req_scheme | Skema permintaan. | [pattern] |
| Baris permintaan dan header | req_method | Metode permintaan. | [pattern] |
| Baris permintaan dan header | req_host | Nilai header permintaan Host. | [pattern] |
| Baris permintaan dan header | req_user_agent | Nilai header permintaan User-Agent. | [pattern] |
| Baris permintaan dan header | req_referer | Nilai header permintaan Referer. | [pattern] |
| Baris permintaan dan header | req_cookie | Nilai cookie tertentu. | name, [pattern] |
| Baris permintaan dan header | req_first_x_forwarded | Alamat pertama dalam header permintaan X-Forwarded-For. | [pattern] |
| Baris permintaan dan header | req_header | Nilai header permintaan tertentu. | name, [pattern] |
| Identifikasi permintaan | req_id | ID permintaan dari permintaan saat ini. | Tidak ada |
Pertimbangan
Batasan berikut berlaku untuk sembilan fungsi dalam topik ini: client_addr, client_country, client_region, client_city, client_isp, ip_country, ip_region, ip_city, dan ip_isp.
Jika alamat klien dimodifikasi oleh kebijakan NAT jaringan penyedia layanan Internet (ISP) atau jika alamat IP tidak terdapat dalam pustaka alamat IP CDN, nilai kembali aktual dari fungsi-fungsi ini akan terpengaruh. Gunakan fungsi-fungsi ini dengan hati-hati.
Pencocokan pola
Fungsi yang sintaksisnya mencakup parameter [pattern] menerima parameter opsional pattern. Saat Anda menentukan pattern, fungsi tersebut mencocokkan nilai yang dibacanya terhadap pattern dan mengembalikan hasil boolean alih-alih nilai itu sendiri.
pattern mendukung dua mode pencocokan:
Pencocokan eksak — Membandingkan nilai dengan
patternsecara persis sama. Ini adalah mode default. Gunakan mode ini untuk memeriksa satu nilai tetap.Pencocokan ekspresi reguler — Menggunakan
patternsebagai ekspresi reguler, diawali denganre:. Gunakan mode ini untuk mencocokkan sekumpulan nilai.
Atribut server
server_addr dan server_port membaca atribut server yang menerima permintaan saat ini.
server_addr
server_addr membaca alamat server yang menerima permintaan saat ini.
Sintaksis —
server_addr()Parameter — Tidak ada.
Nilai kembali — Mengembalikan alamat server. Tipe data: string.
Contoh berikut menunjukkan cara menggunakan server_addr:
s_addr = server_addr()
say(concat('s_addr:', s_addr))server_port
server_port membaca port server yang menerima permintaan saat ini.
Sintaksis —
server_port()Parameter — Tidak ada.
Nilai kembali — Mengembalikan port server. Tipe data: numerik.
Contoh berikut menunjukkan cara menggunakan server_port:
s_port = server_port()
say(concat('s_port:', tostring(s_port)))Atribut client
client_addr dan client_port membaca alamat dan port klien yang mengirim permintaan saat ini.
client_addr
client_addr membaca alamat IP klien. Untuk membaca alamat pertama dalam header permintaan X-Forwarded-For alih-alih itu, gunakan req_first_x_forwarded.
Sintaksis —
client_addr()Parameter — Tidak ada.
Nilai kembali — Mengembalikan alamat IP klien. Tipe data: string.
Untuk batasan akurasi yang berlaku padaclient_addr, lihat Pertimbangan.
Contoh berikut menunjukkan cara menggunakan client_addr:
c_addr = client_addr()
say(concat('c_addr:', c_addr))client_port
client_port membaca port klien.
Sintaksis —
client_port()Parameter — Tidak ada.
Nilai kembali — Mengembalikan port klien. Tipe data: numerik.
Contoh berikut menunjukkan cara menggunakan client_port:
c_port = client_port()
say(concat('c_port:', tostring(c_port)))Geolokasi client
Fungsi geolokasi client_* membaca kode lokasi klien yang mengirim permintaan saat ini. Untuk menyelesaikan alamat IP yang Anda berikan sendiri, gunakan fungsi ip_* sebagai gantinya.
Untuk batasan akurasi yang berlaku pada fungsi-fungsi ini, lihat Pertimbangan.
client_country
client_country membaca kode negara atau wilayah dari alamat IP klien.
Sintaksis —
client_country()Parameter — Tidak ada.
Nilai kembali — Mengembalikan kode negara atau wilayah dari alamat IP klien. Tipe data: string. Untuk kode negara dan wilayah, lihat Kode negara.
Contoh berikut menunjukkan cara menggunakan client_country:
c_country = client_country()
if c_country {
say(concat('client_country:', c_country))
}client_region
client_region membaca kode pembagian administratif (provinsi atau kota) dari alamat IP klien.
Sintaksis —
client_region()Parameter — Tidak ada.
Nilai kembali — Mengembalikan kode pembagian administratif (provinsi atau kota) dari alamat IP klien. Tipe data: string. Untuk kode pembagian administratif, lihat Kode pembagian administratif.
Contoh berikut menunjukkan cara menggunakan client_region:
c_region = client_region()
if c_region {
say(concat('client_region:', c_region))
}client_isp
client_isp membaca kode ISP dari alamat IP klien.
Sintaksis —
client_isp()Parameter — Tidak ada.
Nilai kembali — Mengembalikan kode ISP dari alamat IP klien. Tipe data: string. Untuk kode ISP, lihat Kode ISP.
Contoh berikut menunjukkan cara menggunakan client_isp:
c_isp = client_isp()
if c_isp {
say(concat('client_isp:', c_isp))
}Geolokasi alamat IP tertentu
Fungsi ip_* membaca kode lokasi dari alamat IP yang Anda masukkan dalam parameter ipaddr. Untuk menyelesaikan klien yang mengirim permintaan saat ini, gunakan fungsi geolokasi client_* sebagai gantinya.
Untuk batasan akurasi yang berlaku pada fungsi-fungsi ini, lihat Pertimbangan.
ip_region
ip_region membaca kode pembagian administratif (provinsi atau kota) dari alamat IP tertentu.
Sintaksis —
ip_region(ipaddr)Parameter —
ipaddr: string alamat IP dalam notasi desimal bertitik.Nilai kembali — Mengembalikan kode pembagian administratif (provinsi atau kota) dari alamat IP yang ditentukan. Tipe data: string. Untuk kode pembagian administratif, lihat Kode pembagian administratif.
Contoh berikut menunjukkan cara menggunakan ip_region:
c_region = ip_region('192.168.0.1')
if c_region {
say(concat('ip_region:', c_region))
}ip_isp
ip_isp membaca kode ISP dari alamat IP tertentu.
Sintaksis —
ip_isp(ipaddr)Parameter —
ipaddr: string alamat IP dalam notasi desimal bertitik.Nilai kembali — Mengembalikan kode ISP dari alamat IP yang ditentukan. Tipe data: string. Untuk kode ISP, lihat Kode ISP.
Contoh berikut menunjukkan cara menggunakan ip_isp:
c_isp = ip_isp('192.168.0.1')
if c_isp {
say(concat('ip_isp:', c_isp))
}Penguraian URI
Fungsi-fungsi berikut membaca bagian-bagian individual dari URI permintaan, seperti path, nama file, ekstensi file, segmen path, parameter URI, dan string kueri.
req_uri
req_uri membaca URI permintaan, tidak termasuk parameter kueri.
Sintaksis —
req_uri([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan URI permintaan. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan cara menggunakan req_uri:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: /path1/path2?mode=ip
Response:
req_uri: /path1/path2
req_uri: plain match
req_uri: regex matchreq_uri_basename
req_uri_basename membaca nama file dalam URI permintaan.
Sintaksis —
req_uri_basename([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan nama file dalam URI permintaan. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan bagian mana dari URI permintaan yang merupakan nama file:
Untuk
/document_detail/30360.html, nama filenya adalah30360.Untuk
/M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp4, nama filenya adalah2-1_g.Untuk
/tarball/foo.tar.bz2, nama filenya adalahfoo.
Contoh berikut menunjukkan cara menggunakan req_uri_basename:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: /path1/path2/foo.tar.bz2
Response:
req_uri_basename: foo 3
req_uri_basename: plain match
req_uri_basename: regex matchreq_uri_ext
req_uri_ext membaca ekstensi file dalam URI permintaan.
Sintaksis —
req_uri_ext([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan ekstensi file dalam URI permintaan. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan bagian mana dari URI permintaan yang merupakan ekstensi file:
Untuk
/document_detail/30360.html, ekstensi filenya adalah.html.Untuk
/M604/guopei_mp4/ZYJY2017BJGL0101/2-1_g.mp4, ekstensi filenya adalah.mp4.Untuk
/tarball/foo.tar.bz2, ekstensi filenya adalah.tar.bz2.
Contoh berikut menunjukkan cara menggunakan req_uri_ext:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: /path1/path2/foo.tar.bz2
Response:
req_uri_ext: .tar.bz2 8
req_uri_ext: plain match
req_uri_ext: regex matchreq_uri_seg
req_uri_seg membagi URI permintaan berdasarkan garis miring (/) menjadi segmen-segmen.
Sebuah segmen dapat berisi hingga 128 karakter. Konten yang melebihi batas ini akan dibuang.
Sintaksis —
req_uri_seg([idx])Parameter —
idx(opsional): menentukan indeks awal. Indeks segmen dimulai dari 1 dan meningkat dari awal URI permintaan, dari kiri ke kanan.Nilai kembali
Tanpa
idx: mengembalikan kamus yang berisi semua segmen. Tipe data: kamus.Dengan
idx: mengembalikan kamus yang berisi segmen-segmen mulai dari indeks yang ditentukan, termasuk segmen pada indeks tersebut. Tipe data: kamus.
Saat Anda mengambil segmen pada indeks tertentu dari kamus yang dikembalikan, Anda harus memeriksa apakah segmen tersebut kosong.
Contoh berikut menunjukkan cara menggunakan req_uri_seg:
# 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)))
}Contoh ini menghasilkan hasil berikut:
Request: /path1/path2/path3/path4?mode=req2
Response:
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]=path4req_uri_arg
req_uri_arg membaca nilai dari parameter URI tertentu.
Sintaksis —
req_uri_arg(name, [pattern])Parameter
name: nama parameter.pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.
Nilai kembali
Tanpa
pattern:Parameter ada: mengembalikan nilai string dari parameter yang ditentukan oleh
name. Tipe data: string.Parameter tidak ada: mengembalikan
false.
Dengan
pattern:Parameter ada: melakukan pencocokan dan mengembalikan
truejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.Parameter tidak ada: mengembalikan
false.
Contoh berikut menunjukkan cara menggunakan req_uri_arg:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: /path1/path2/path3/path4?mode=req4&uid
Response:
not found uid
check uid fail. plain mode
check uid fail. regex mode
Request: /path1/path2/path3/path4?mode=req4&uid=
Response:
found uid
check uid fail. plain mode
check uid fail. regex mode
Request: /path1/path2/path3/path4?mode=req4&uid=12345
Response:
found uid 12345
check uid fail. plain mode
check uid ok. regex modereq_uri_query_string
req_uri_query_string membaca parameter kueri dari permintaan, tidak termasuk tanda tanya (?).
Sintaksis —
req_uri_query_string([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan parameter kueri dari permintaan. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan cara menggunakan req_uri_query_string:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: /path1/path2/path3/path4?mode=req5&token=34Deasd#243
Response:
req_uri_query_string: mode=req5&token=34Deasd
check uri query string fail. plain mode
check uri query string ok. regex modeBaris permintaan dan header
Fungsi-fungsi berikut membaca atribut baris permintaan, nilai header permintaan, dan nilai cookie dari permintaan saat ini.
req_scheme
req_scheme membaca skema permintaan.
Sintaksis —
req_scheme([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan skema permintaan. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan cara menggunakan req_scheme:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: http://xx..
Response:
req_scheme: http
check scheme fail. plain mode
check scheme ok. regex modereq_method
req_method membaca metode permintaan.
Sintaksis —
req_method([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan metode permintaan. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan cara menggunakan req_method:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: POST /xxxx/xxx
Response:
req_method: POST
check method fail. plain mode
check method ok. regex modereq_host
req_host membaca nilai header permintaan Host.
Sintaksis —
req_host([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan nilai header permintaanHost. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan cara menggunakan req_host:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: Host: image.developer.aliyundoc.com
Response:
req_host: image.developer.aliyundoc.com
check host fail. plain mode
check host ok. regex modereq_user_agent
req_user_agent membaca nilai header permintaan User-Agent.
Sintaksis —
req_user_agent([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan nilai header permintaanUser-Agent. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan cara menggunakan req_user_agent:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Response:
req_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
check user_agent fail. plain mode
check user_agent ok. regex modereq_referer
req_referer membaca nilai header permintaan Referer.
Sintaksis —
req_referer([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan nilai header permintaanReferer. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan cara menggunakan req_referer:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: Referer: https://example.aliyundoc.com/******00003
Response:
req_referer: https://example.aliyundoc.com/******00003
check referer ok. plain mode
check referer fail. regex modereq_first_x_forwarded
req_first_x_forwarded membaca alamat pertama dalam header permintaan X-Forwarded-For. Untuk membaca alamat IP klien sebagai gantinya, gunakan client_addr.
Sintaksis —
req_first_x_forwarded([pattern])Parameter —
pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.Nilai kembali
Tanpa
pattern: mengembalikan alamat pertama dalam header permintaanX-Forwarded-For. Tipe data: string.Dengan
pattern: mengembalikantruejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.
Contoh berikut menunjukkan cara menggunakan req_first_x_forwarded:
# req_first_x_forwarded
say(concat('req_first_x_forwarded: ', req_first_x_forwarded()))
if req_first_x_forwarded('203.0.113.1') {
say('check first_x_forwarded ok. plain mode')
} else {
say('check first_x_forwarded fail. plain mode')
}
if req_first_x_forwarded('re:203.0.113.[0-9]') {
say('check first_x_forwarded ok. regex mode')
} else {
say('check first_x_forwarded fail. regex mode')
}Contoh ini menghasilkan hasil berikut:
Request: X-Forwarded-For: 203.0.113.1, 10.10.10.10, 172.16.0.1
Response:
req_first_x_forwarded: 203.0.113.1
check first_x_forwarded ok. plain mode
check first_x_forwarded ok. regex modereq_header
req_header membaca nilai header permintaan tertentu.
Sintaksis —
req_header(name, [pattern])Parameter
name: nama header permintaan. Ganti setiap tanda hubung (-) dalam nama header permintaan dengan garis bawah (_). Misalnya,X-USER-IDmenjadix_user_id.pattern: pola yang digunakan untuk pencocokan. Untuk mode pencocokan yang didukung, lihat Pencocokan pola.
Nilai kembali
Tanpa
pattern:Header permintaan ada: mengembalikan nilai string dari header permintaan yang ditentukan oleh
name. Tipe data: string.Header permintaan tidak ada: mengembalikan
false.
Dengan
pattern:Header permintaan ada: melakukan pencocokan dan mengembalikan
truejika pencocokan berhasil, ataufalsejika pencocokan gagal. Tipe data: boolean.Header permintaan tidak ada: mengembalikan
false.
Contoh berikut menunjukkan cara menggunakan req_header:
# 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')
}Contoh ini menghasilkan hasil berikut:
Request: X-UID: es developer
Response:
found header x-uid es developer
check header x-uid ok. plain mode
check header x-uid ok. regex modeIdentifikasi permintaan
Fungsi berikut membaca ID permintaan dari permintaan saat ini.
req_id
req_id membaca ID permintaan, yaitu pengidentifikasi unik untuk setiap permintaan.
Sintaksis —
req_id()Parameter — Tidak ada.
Nilai kembali — Mengembalikan ID permintaan. Tipe data: string.
Contoh berikut menunjukkan cara menggunakan req_id:
# req_id
say(concat('req_id: ', req_id()))Contoh ini mengembalikan req_id: 6451c43d15815890089411000e.