All Products
Search
Document Center

ApsaraVideo VOD:Fungsi pemrosesan permintaan

Last Updated:Jul 11, 2026

Sintaksis, parameter, nilai kembali, dan contoh fungsi pemrosesan permintaan.

add_req_header

Item Deskripsi
Sintaksis add_req_header(name, value [, append])
Deskripsi Menambahkan header permintaan ke permintaan sebelum dialihkan ke origin server.
Parameter
  • name: nama header permintaan yang ingin Anda tambahkan. Tipe data: string.
  • value: nilai header permintaan yang ingin Anda tambahkan. Tipe data: string.
  • append: menentukan apakah akan menambahkan header permintaan dengan value yang ditentukan jika header permintaan dengan nama yang sama sudah ada. Nilai yang valid: true dan false. Nilai default: false. Tipe data: Boolean. Jika Anda mengatur parameter ini ke false, nilai yang ditentukan akan menimpa nilai header permintaan yang sudah ada.
Nilai kembali Mengembalikan true secara default dan mengembalikan false jika header permintaan yang ditentukan 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')

Catatan: Header permintaan berikut ditambahkan:
USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x

Header USER-DEFINED-REQ-2 ditambahkan lalu dihapus. Oleh karena itu, header permintaan USER-DEFINED-REQ-2 tidak disertakan dalam permintaan yang dialihkan ke origin server.

del_req_header

Item Deskripsi
Sintaksis del_req_header(name)
Deskripsi Menghapus header permintaan dari permintaan sebelum dialihkan ke origin server.
Parameter name: nama header permintaan yang ingin Anda hapus. Tipe data: string.
Nilai kembali Mengembalikan true secara default dan mengembalikan false jika header permintaan yang ditentukan 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')

Catatan: Header permintaan berikut ditambahkan:
USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x

Header USER-DEFINED-REQ-2 ditambahkan lalu dihapus. Oleh karena itu, header permintaan USER-DEFINED-REQ-2 tidak disertakan dalam permintaan yang dialihkan ke origin server.

add_rsp_header

Item Deskripsi
Sintaksis add_rsp_header(name, value [, append])
Deskripsi Menambahkan header respons.
Parameter
  • name: nama header respons yang ingin Anda tambahkan. Tipe data: string.
  • value: nilai header respons yang ingin Anda tambahkan. Tipe data: string.
    Anda dapat menentukan salah satu ekspresi berikut untuk parameter value agar nilainya dapat diganti secara dinamis pada fase respons:
    • ${x}: diganti dengan nilai ngx.var.x.
    • @{y}: diganti dengan nilai response header y.
  • append: menentukan apakah akan menambahkan header respons dengan value yang ditentukan jika header respons dengan nama yang sama sudah ada. Nilai yang valid: true dan false. Nilai default: false. Tipe data: Boolean. Jika Anda mengatur parameter ini ke false, nilai yang ditentukan akan menimpa nilai header respons yang sudah ada.
Nilai kembali Mengembalikan true secara default dan mengembalikan false jika header respons yang ditentukan 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')

Catatan: Header respons berikut ditambahkan:
USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x

Header USER-DEFINED-RSP-2 ditambahkan lalu dihapus. Oleh karena itu, header USER-DEFINED-RSP-2 tidak disertakan dalam respons.

del_rsp_header

Item Deskripsi
Sintaksis del_rsp_header(name)
Deskripsi Menghapus header respons.
Parameter name: nama header respons yang ingin Anda hapus. Tipe data: string.
Nilai kembali Mengembalikan true secara default dan mengembalikan false jika header respons yang ditentukan 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')

Header respons berikut ditambahkan:
USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x

Header USER-DEFINED-RSP-2 ditambahkan lalu dihapus. Oleh karena itu, header USER-DEFINED-RSP-2 tidak disertakan dalam respons.

encode_args

Item Deskripsi
Sintaksis encode_args(d)
Deskripsi Mengonversi pasangan k/v dalam dictionary yang ditentukan oleh d menjadi string URI-encoded dalam format k1=v1&k2=v2.
Parameter d: dictionary yang ingin Anda konversi.
Nilai kembali Mengembalikan string URI-encoded.
Contoh
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'))
}

Output: Header respons berikut ditambahkan:
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

Item Deskripsi
Sintaksis decode_args(s)
Deskripsi Mengonversi string URI-encoded dalam format k1=v1&k2=v2 menjadi objek dictionary.
Parameter s: string yang ingin Anda konversi.
Nilai kembali Mengembalikan objek dictionary yang dikonversi dari string yang ditentukan.
Contoh
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'))
}

Output: Header respons berikut ditambahkan:
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

rewrite

Item Deskripsi
Sintaksis rewrite(url, flag [, code])
Deskripsi Menulis ulang URL atau mengeluarkan pengalihan (redirect).
Parameter
  • url: URL target. Tipe: string.
    • Ketika flag adalah redirect atau break, parameter ini menentukan path URI baru. Hanya path yang ditulis ulang.
    • Ketika enhance_redirect atau enhance_break, parameter ini menentukan URI baru yang menggantikan path dan parameter kueri asli.
  • flag: Mode penulisan ulang. Tipe: string.
    • : Menulis ulang hanya path URI dan mempertahankan parameter kueri asli. Aksi ini mengeluarkan redirect ke URL baru. Kode status default adalah 302. Anda dapat menentukan kode status berbeda (301, 303, 307, atau 308) menggunakan parameter code
    • break: Menulis ulang hanya path URI ke url yang ditentukan dan mempertahankan parameter kueri asli. Pemrosesan permintaan dilanjutkan secara internal dengan URI baru.
    • redirect: Mirip dengan , tetapi menggantikan jalur URI dan parameter kueri dengan nilai yang ditentukan.
    • break: Mirip dengan , tetapi menggantikan jalur URI dan parameter kueri dengan yang disediakan.
  • code: (Opsional) Kode status HTTP yang digunakan untuk redirect. Tipe: numerik.

    Parameter ini hanya berlaku ketika flag adalah redirect atau enhance_redirect.

Nilai kembali
  • true dikembalikan oleh fungsi untuk operasi tulis ulang ( dan ).
  • Untuk operasi redirect (redirect dan enhance_redirect), fungsi tidak mengembalikan nilai apa pun karena menghentikan alur permintaan.
Contoh
if and($arg_mode, eq($arg_mode, 'rewrite:enhance_break')) {
  rewrite('/a/example/examplefile.txt?k=v', 'enhance_break')
}
// Menulis ulang URI dan string kueri untuk permintaan origin dan pencarian cache 
// menjadi /a/example/examplefile.txt?k=v.

if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect')) {
  rewrite('/a/example/examplefile.txt?k=v', 'enhance_redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect_301')) {
  rewrite('/a/example/examplefile.txt?k=v', 'enhance_redirect', 301)
}
// Mengeluarkan redirect 302 (default) atau 301 ke /a/example/examplefile.txt?k=v.

if and($arg_mode, eq($arg_mode, 'rewrite:break')) {
  rewrite('/a/example/examplefile.txt', 'break')
}
// Menulis ulang path URI menjadi /a/example/examplefile.txt untuk permintaan origin dan 
// pencarian cache, mempertahankan string kueri asli.

if and($arg_mode, eq($arg_mode, 'rewrite:redirect')) {
  rewrite('/a/example/examplefile.txt', 'redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:redirect_301')) {
  rewrite('/a/example/examplefile.txt', 'redirect', 301)
}
// Mengeluarkan redirect 302 (default) atau 301 ke /a/example/examplefile.txt, 
// mempertahankan string kueri asli.

say

Item Deskripsi
Sintaksis say(arg)
Deskripsi Mencetak badan respons dan menambahkan karakter baris baru di akhir output.
Parameter arg: konten badan respons. Tipe data: tipe apa pun.
Nilai kembali Tidak ada.
Contoh
say('hello')
print('byebye')
print('byebye')

Output:
hello
byebyebyebye

print

Item Deskripsi
Sintaksis print(arg)
Deskripsi Mencetak badan respons tanpa menambahkan baris baru, berbeda dengan fungsi say().
Parameter arg: konten badan respons. Tipe data: tipe apa pun.
Nilai kembali Tidak ada.
Contoh
say('hello')
print('byebye')
print('byebye')

Output:
hello
byebyebyebye

exit

Item Deskripsi
Sintaksis exit(code [, body])
Deskripsi Mengakhiri permintaan saat ini dengan code yang ditentukan. Jika body ditentukan, respons menyertakan konten badan tersebut.
Parameter
  • code: kode status HTTP yang akan dikembalikan.
  • body: badan respons.
Nilai kembali Tidak ada.
Contoh
  • Contoh 1
    if not($arg_key) {
        exit(403)
    }
    Catatan: Jika permintaan tidak menyertakan parameter key, permintaan ditolak dan kode status HTTP 403 dikembalikan. 
    
    if not($cookie_user) {
        exit(403, 'not cookie user')
    }
    Catatan: Jika permintaan tidak menyertakan cookie_user, permintaan ditolak dan respons yang berisi badan "not cookie user" dikembalikan dengan kode status HTTP 403.
    
    if not(0) {
        exit(403)
    }
    Catatan: Fungsi not(0) mengembalikan nilai false.
    
    if not(false) {
        exit(403)
    }
    Catatan: Fungsi not(false) mengembalikan nilai true.
  • Contoh 2
    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)
    }

get_rsp_header

Item Deskripsi
Sintaksis get_rsp_header(str)
Deskripsi Mengambil header respons.
Parameter str: header respons yang ingin Anda peroleh. Tipe data: string.
Nilai kembali Mengembalikan nilai header respons yang ditentukan.
  • Jika header respons yang ditentukan ada, header respons tersebut dikembalikan. Tipe data header respons adalah dictionary atau string.
  • Jika header respons yang ditentukan tidak ada, nilai false dikembalikan.
Contoh
ct = get_rsp_header('content-type')
if ct {
    add_rsp_header('origin-content-type', 'is')
} else {
      add_rsp_header('origin-content-type', 'no')
}

add_rsp_cookie

Item Deskripsi
Sintaksis add_rsp_cookie(k, v [,properties])
Deskripsi Menetapkan cookie respons. Setiap kali fungsi dipanggil, header respons Set-Cookie baru dihasilkan.
Parameter
  • k: nama cookie.
  • v: nilai cookie.
  • properties: properti cookie. Parameter ini opsional. Untuk informasi lebih lanjut, lihat Set-Cookie.
Nilai kembali Mengembalikan true jika cookie berhasil ditetapkan, atau false jika operasi gagal.
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:
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