All Products
Search
Document Center

CDN:Fungsi pemrosesan permintaan

Last Updated:Aug 28, 2026

EdgeScript menyediakan fungsi bawaan untuk memanipulasi header permintaan dan respons HTTP, menulis ulang atau mengalihkan URI, mengeluarkan 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

Parameter

Type

Wajib

Deskripsi

name

string

Ya

Nama header permintaan yang akan ditambahkan.

value

string

Ya

Nilai header permintaan yang akan ditambahkan.

append

Boolean

Tidak

Apakah header tersebut ditambahkan jika sudah ada header dengan nama yang sama. 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

Parameter

Tipe

Wajib

Deskripsi

name

string

Ya

Nama 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

Parameter

Tipe

Wajib

Deskripsi

name

string

Ya

Nama header respons yang akan ditambahkan.

value

string

Ya

Nilai header respons yang akan ditambahkan. Mendukung ekspresi dinamis: ${x} diganti dengan nilai ngx.var.x; @{y} diganti dengan nilai header respons y.

append

Boolean

Tidak

Apakah header tersebut ditambahkan jika sudah ada header dengan nama yang sama. 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

Parameter

Tipe

Wajib

Deskripsi

name

string

Ya

Nama 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

Parameter

Type

Wajib

Deskripsi

str

string

Ya

Nama 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

Parameter

Type

Wajib

Deskripsi

url

string

Ya

URI atau URL target setelah penulisan ulang atau pengalihan.

flag

string

Ya

Mode penulisan ulang. Lihat tabel referensi flag di bawah.

code

numeric

Tidak

Kode 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 URI

URI + parameter kueri

Penulisan ulang sisi server (tanpa pengalihan, URL di browser tidak berubah)

break

enhance_break

Pengalihan sisi klien (browser membuat permintaan baru, URL berubah)

redirect

enhance_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

Parameter

Tipe

Wajib

Deskripsi

arg

any

Ya

Konten 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

Parameter

Tipe

Wajib

Deskripsi

arg

any

Ya

Konten 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

Parameter

Tipe

Wajib

Deskripsi

code

numeric

Ya

Kode status HTTP yang akan dikembalikan.

body

any

Tidak

Badan respons yang akan disertakan dalam respons.

Nilai kembali

Tidak ada.

Contoh

Contoh 1: blokir 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

Parameter

Tipe

Wajib

Deskripsi

k

string

Ya

Nama cookie.

v

string

Ya

Nilai cookie.

properties

dictionary

Tidak

Atribut 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

Parameter

Tipe

Wajib

Deskripsi

d

dictionary

Ya

Dictionary 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

Parameter

Tipe

Wajib

Deskripsi

s

string

Ya

String 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 adalah operasi kebalikannya dan digunakan bersama dengan encode_args.