All Products
Search
Document Center

CDN:Fungsi pemrosesan permintaan

Last Updated:Apr 01, 2026

EdgeScript menyediakan fungsi bawaan untuk memanipulasi header permintaan dan respons HTTP, menulis ulang atau mengalihkan URI, menghasilkan badan respons, serta mengatur cookie. Referensi ini mencakup sintaksis, parameter, nilai kembali, dan contoh setiap fungsi.

Lompat ke:

Header permintaan

add_req_header

Menambahkan header permintaan sebelum permintaan diteruskan ke origin server.

Sintaksis

add_req_header(name, value [, append])

Parameter

ParameterTipeWajibDeskripsi
namestringYaNama header permintaan yang akan ditambahkan.
valuestringYaNilai header permintaan yang akan ditambahkan.
appendBooleanTidakApakah akan menambahkan header jika header dengan nama yang sama sudah ada. Default: false. Jika false, nilai baru akan menimpa nilai yang sudah ada.

Nilai kembali

Mengembalikan true secara default. Mengembalikan false jika nama header tidak valid.

Contoh

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

Hasil: origin server menerima header berikut:

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

USER-DEFINED-REQ-2 ditambahkan lalu dihapus, sehingga tidak diteruskan ke origin server.

del_req_header

Menghapus header permintaan sebelum permintaan diteruskan ke origin server.

Sintaksis

del_req_header(name)

Parameter

ParameterTipeWajibDeskripsi
namestringYaNama header permintaan yang akan dihapus.

Nilai kembali

Mengembalikan true secara default. Mengembalikan false jika nama header tidak valid.

Contoh

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

Hasil: origin server menerima header berikut:

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

USER-DEFINED-REQ-2 ditambahkan lalu dihapus, sehingga tidak diteruskan ke origin server.

Header respons

add_rsp_header

Menambahkan header respons.

Sintaksis

add_rsp_header(name, value [, append])

Parameter

ParameterTipeWajibDeskripsi
namestringYaNama header respons yang akan ditambahkan.
valuestringYaNilai header respons yang akan ditambahkan. Mendukung ekspresi dinamis: ${x} diganti dengan nilai ngx.var.x; @{y} diganti dengan nilai header respons y.
appendBooleanTidakApakah akan menambahkan header jika header dengan nama yang sama sudah ada. Default: false. Jika false, nilai baru akan menimpa nilai yang sudah ada.

Nilai kembali

Mengembalikan true secara default. Mengembalikan false jika nama header tidak valid.

Contoh

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

Hasil: respons mencakup header berikut:

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

USER-DEFINED-RSP-2 ditambahkan lalu dihapus, sehingga tidak termasuk dalam respons.

del_rsp_header

Menghapus header respons.

Sintaksis

del_rsp_header(name)

Parameter

ParameterTipeWajibDeskripsi
namestringYaNama header respons yang akan dihapus.

Nilai kembali

Mengembalikan true secara default. Mengembalikan false jika nama header tidak valid.

Contoh

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

Hasil: respons mencakup header berikut:

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

USER-DEFINED-RSP-2 ditambahkan lalu dihapus, sehingga tidak termasuk dalam respons.

get_rsp_header

Mengambil nilai header respons.

Sintaksis

get_rsp_header(str)

Parameter

ParameterTipeWajibDeskripsi
strstringYaNama header respons yang akan diambil.

Nilai kembali

  • Jika header ada: mengembalikan nilai header sebagai string, angka, dictionary, atau Boolean.

  • Jika header tidak ada: mengembalikan false.

Contoh

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

Penulisan ulang URL dan pengalihan

rewrite

Menulis ulang URI atau mengalihkan permintaan.

Sintaksis

rewrite(url, flag, code)

Parameter

ParameterTipeWajibDeskripsi
urlstringYaURI atau URL target setelah penulisan ulang atau pengalihan.
flagstringYaMode penulisan ulang. Lihat tabel referensi flag di bawah.
codenumericTidakKode status HTTP untuk pengalihan. Hanya berlaku ketika flag bernilai redirect atau enhance_redirect. Nilai yang valid: 301, 302, 303, 307, 308. Default: 302.

Referensi flag

Gunakan tabel ini untuk memilih flag yang tepat sesuai kebutuhan Anda:

Hanya URIURI + parameter kueri
Penulisan ulang sisi server (tanpa pengalihan, URL di browser tidak berubah)breakenhance_break
Pengalihan sisi klien (browser membuat permintaan baru, URL berubah)redirectenhance_redirect

Nilai kembali

  • Operasi penulisan ulang (break, enhance_break): mengembalikan true.

  • Operasi pengalihan (redirect, enhance_redirect): tidak mengembalikan nilai.

Contoh

Penulisan ulang sisi server (URI + parameter)

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

Origin server menerima permintaan dengan URI dan parameter kueri yang ditulis ulang menjadi /example/examplefile.txt?k=v.

Pengalihan sisi klien (URI + parameter)

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

Klien menerima pengalihan 302 atau 301 ke /example/examplefile.txt?k=v.

Penulisan ulang sisi server (hanya URI)

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

Origin server menerima permintaan dengan URI yang ditulis ulang menjadi /example/examplefile.txt. Parameter kueri asli tetap dipertahankan.

Pengalihan sisi klien (hanya 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)
}

Klien menerima pengalihan 302 atau 301 ke /example/examplefile.txt. Parameter kueri asli tetap dipertahankan.

Badan respons

say

Mencetak konten ke badan respons dan menambahkan karakter baris baru.

Sintaksis

say(arg)

Parameter

ParameterTipeWajibDeskripsi
argapa sajaYaKonten yang akan ditulis ke badan respons.

Nilai kembali

Tidak ada.

Contoh

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

Output:

hello
byebyebyebye

print

Mencetak konten ke badan respons tanpa menambahkan karakter baris baru.

Sintaksis

print(arg)

Parameter

ParameterTipeWajibDeskripsi
argapa sajaYaKonten yang akan ditulis ke badan respons.

Nilai kembali

Tidak ada.

Contoh

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

Output:

hello
byebyebyebye

exit

Menghentikan permintaan saat ini dengan kode status HTTP yang ditentukan dan badan respons opsional.

Sintaksis

exit(code [, body])

Parameter

ParameterTipeWajibDeskripsi
codenumericYaKode status HTTP yang akan dikembalikan.
bodyapa sajaTidakBadan respons yang akan disertakan dalam respons.

Nilai kembali

Tidak ada.

Contoh

Contoh 1: memblokir permintaan berdasarkan parameter kueri dan cookie

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

Jika permintaan tidak menyertakan parameter kueri key, node CDN mengembalikan HTTP 403.

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

Jika permintaan tidak menyertakan cookie user, node CDN mengembalikan HTTP 403 dengan badan respons not cookie user.

if not(0) {
    exit(403)
}

not(0) dievaluasi sebagai false, sehingga blok ini tidak dijalankan.

if not(false) {
    exit(403)
}

not(false) dievaluasi sebagai true, sehingga node CDN mengembalikan HTTP 403.

Contoh 2: otentikasi berbasis 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)
}

Contoh ini mengekstraksi segmen dari URI permintaan, menghitung digest MD5, dan memvalidasinya terhadap signature yang tertanam. Jika URI tidak sesuai format atau digest tidak cocok, node CDN mengembalikan HTTP 403 dengan header error.

Cookie

add_rsp_cookie

Mengatur cookie dalam respons. Setiap pemanggilan menghasilkan header respons Set-Cookie baru.

Sintaksis

add_rsp_cookie(k, v [, properties])

Parameter

ParameterTipeWajibDeskripsi
kstringYaNama cookie.
vstringYaNilai cookie.
propertiesdictionaryTidakAtribut cookie seperti path, domain, secure, httponly, expires, max_age, samesite, dan extension. Untuk referensi atribut lengkap, lihat Set-Cookie.

Nilai kembali

Mengembalikan true jika cookie berhasil diatur. Mengembalikan false jika cookie tidak dapat diatur.

Contoh

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

Respons mencakup header Set-Cookie berikut:

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

Encoding

encode_args

Mengonversi pasangan kunci-nilai dalam dictionary menjadi string yang di-encode URI dalam format k1=v1&k2=v2.

Sintaksis

encode_args(d)

Parameter

ParameterTipeWajibDeskripsi
ddictionaryYaDictionary yang akan di-encode.

Nilai kembali

Mengembalikan string yang di-encode URI.

Contoh

encode_args dan decode_args biasanya digunakan bersama. Contoh berikut meng-encode dictionary, mengaturnya sebagai header respons, lalu mendekode dan membaca nilai individualnya:

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

Respons mencakup header berikut:

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

Mengonversi string yang di-encode URI dalam format k1=v1&k2=v2 menjadi dictionary.

Sintaksis

decode_args(s)

Parameter

ParameterTipeWajibDeskripsi
sstringYaString yang di-encode URI yang akan didekode.

Nilai kembali

Mengembalikan dictionary yang dikonversi dari string tersebut.

Contoh

Lihat contoh encode_args di atas. decode_args merupakan operasi invers dan digunakan bersama dengan encode_args.