All Products
Search
Document Center

Server Load Balancer:Fungsi pemrosesan permintaan

Last Updated:Jun 27, 2025

Topik ini menjelaskan sintaks, fitur, parameter, nilai kembali, serta menyediakan contoh penggunaan dari fungsi pemrosesan permintaan.

add_req_header | del_req_header | add_rsp_header | del_rsp_header | encode_args | decode_args | rewrite | say | print | exit

add_req_header

Item

Deskripsi

Sintaks

add_req_header(name, value [, append])

Fitur

Menambahkan header permintaan ke permintaan sebelum mereka dialihkan ke server asal.

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 value yang ditentukan jika header permintaan dengan nama yang sama sudah ada. Nilai 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 ada.

Nilai kembali

true dikembalikan secara default. Jika header permintaan yang ditentukan tidak valid, false dikembalikan.

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

Header permintaan:

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

Header USER-DEFINED-REQ-2 ditambahkan lalu dihapus. Oleh karena itu, header USER-DEFINED-REQ-2 tidak termasuk dalam permintaan.

del_req_header

Item

Deskripsi

Sintaks

del_req_header(name)

Fitur

Menghapus header permintaan dari permintaan sebelum mereka dialihkan ke server asal.

Parameter

name: nama header permintaan yang ingin Anda hapus. Tipe data: string.

Nilai kembali

true dikembalikan secara default. Jika header permintaan yang ditentukan tidak valid, false dikembalikan.

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

Header:

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

Header USER-DEFINED-REQ-1: 1, USER-DEFINED-REQ-1: x, dan USER-DEFINED-REQ-2: 2 ditambahkan, dan header USER-DEFINED-REQ-2 dihapus. Oleh karena itu, header USER-DEFINED-REQ-2 tidak termasuk dalam permintaan.

add_rsp_header

Item

Deskripsi

Sintaks

add_rsp_header(name, value [, append])

Fitur

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 dari ekspresi berikut untuk parameter value untuk memungkinkan nilainya diganti secara dinamis pada fase respons:

    • ${x}: diganti dengan nilai dari variable x.

    • @{y}: diganti dengan nilai dari response header y.

  • append: menentukan apakah akan menambahkan value yang ditentukan jika header respons dengan nama yang sama sudah ada. Nilai 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 ada.

Nilai kembali

true dikembalikan secara default. Jika header respons yang ditentukan tidak valid, false dikembalikan.

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:

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

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

del_rsp_header

Item

Deskripsi

Sintaks

del_rsp_header(name)

Fitur

Menghapus header respons.

Parameter

name: nama header respons yang ingin Anda hapus. Tipe data: string.

Nilai kembali

true dikembalikan secara default. Jika header respons yang ditentukan tidak valid, false dikembalikan.

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:

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

Header USER-DEFINED-REQ-1: 1, USER-DEFINED-REQ-1: x, dan USER-DEFINED-REQ-2: 2 ditambahkan, dan header USER-DEFINED-REQ-2 dihapus. Oleh karena itu, header USER-DEFINED-REQ-2 tidak termasuk dalam respons.

encode_args

Item

Deskripsi

Sintaks

encode_args(d)

Fitur

Mengonversi pasangan key-value dalam kamus yang ditentukan oleh d menjadi string terkode URI dalam format k1=v1&k2=v2.

Parameter

d: kamus yang ingin Anda konversi.

Nilai kembali

Sebuah string terkode URI.

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-AScript-ENCODE-ARGS', my_args_str)

to_args = decode_args(my_args_str)
if get(to_args, 'algo') {
    add_rsp_header('X-AScript-DECODE-ARGS-ALGO', get(to_args, 'algo'))
}
if get(to_args, 'signature') {
    add_rsp_header('X-AScript-DECODE-ARGS-SIGN', get(to_args, 'signature'))
}

Header respons:

X-AScript-ENCODE-ARGS: signature=da9dc4b7-87ae-4330-aaaf-e5454e2c2af1&algo=private%20sign1
X-AScript-DECODE-ARGS-ALGO: private sign1
X-AScript-DECODE-ARGS-SIGN: da9dc4b7-87ae-4330-aaaf-e5454e2c2af1

decode_args

Item

Deskripsi

Sintaks

decode_args(s)

Fitur

Mengonversi string terkode URI dalam format k1=v1&k2=v2 menjadi string tipe kamus.

Parameter

s: string yang ingin Anda konversi.

Nilai kembali

Objek kamus 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-AScript-ENCODE-ARGS', my_args_str)

to_args = decode_args(my_args_str)
if get(to_args, 'algo') {
    add_rsp_header('X-AScript-DECODE-ARGS-ALGO', get(to_args, 'algo'))
}
if get(to_args, 'signature') {
    add_rsp_header('X-AScript-DECODE-ARGS-SIGN', get(to_args, 'signature'))
}

Header respons:

X-AScript-ENCODE-ARGS: signature=da9dc4b7-87ae-4330-aaaf-e5454e2c2af1&algo=private%20sign1
X-AScript-DECODE-ARGS-ALGO: private sign1
X-AScript-DECODE-ARGS-SIGN: da9dc4b7-87ae-4330-aaaf-e5454e2c2af1

rewrite

Item

Deskripsi

Sintaks

rewrite(url, flag, code)

Fitur

Melakukan rewrite atau redirect.

Parameter

  • url: URL ke mana URI sumber ditulis ulang setelah operasi rewrite. Tipe data: string.

    • Jika Anda mengatur parameter flag ke redirect atau break, hanya URI yang ditulis ulang. Parameter ini menentukan URI akhir setelah operasi rewrite.

    • Jika Anda mengatur parameter flag ke enhance_redirect atau enhance_break, baik URI maupun parameter ditulis ulang. Parameter ini menentukan URI dan parameter akhir setelah operasi rewrite.

  • flag: mode rewrite. Tipe data: string.

    • redirect: hanya menulis ulang URI. Parameter tidak ditulis ulang. Secara default, redirect 302 dilakukan. Jika Anda menentukan mode ini, parameter code dapat dikonfigurasi. Nilai valid untuk parameter code adalah 301, 302 (default), 303, 307, dan 308.

    • break: hanya menulis ulang URI ke URL. Parameter tidak ditulis ulang.

    • enhance_redirect: mirip dengan redirect. Namun, baik URI maupun parameter ditulis ulang.

    • enhance_break: mirip dengan break. Namun, baik URI maupun parameter ditulis ulang.

  • code: kode status HTTP. Tipe data: numerik.

    Parameter ini tersedia hanya ketika Anda mengatur parameter flag ke redirect atau enhance_redirect.

Nilai kembali

  • true dikembalikan secara default untuk operasi rewrite.

  • Secara default, tidak ada nilai yang dikembalikan untuk redirect.

Contoh

if and($arg_mode, eq($arg_mode, 'rewrite:enhance_break')) {
  rewrite('/a/b/c.txt?k=v', 'enhance_break')
}
#Catatan: URI dan parameter permintaan yang dialihkan ke server asal ditulis ulang menjadi /a/b/c.txt?k=v

if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect')) {
  rewrite('/a/b/c.txt?k=v', 'enhance_redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect_301')) {
  rewrite('/a/b/c.txt?k=v', 'enhance_redirect', 301)
}
#Catatan: Redirect 302 atau 301 ke /a/b/c.txt?k=v dilakukan.

if and($arg_mode, eq($arg_mode, 'rewrite:break')) {
  rewrite('/a/b/c.txt', 'break')
}
#Catatan: URI permintaan yang dialihkan ke server asal ditulis ulang menjadi /a/b/c.txt dan parameter asli dalam permintaan tetap tidak berubah.

if and($arg_mode, eq($arg_mode, 'rewrite:redirect')) {
  rewrite('/a/b/c.txt', 'redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:redirect_301')) {
  rewrite('/a/b/c.txt', 'redirect', 301)
}
#Catatan: Redirect 302 atau 301 ke /a/b/c.txt dilakukan dan parameter asli tetap tidak berubah.

say

Item

Deskripsi

Sintaks

say(arg)

Fitur

Mencetak badan respons dan menambahkan karakter baris baru di akhir output.

Parameter

arg: isi dari badan respons. Tipe data: semua jenis.

Nilai kembali

Tidak tersedia

Contoh

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

Output:

hello
byebyebyebye

print

Item

Deskripsi

Sintaks

print(arg)

Fitur

Mencetak badan respons. Fungsi ini berbeda dari fungsi say(). Fungsi ini tidak menambahkan baris baru di akhir output.

Parameter

arg: isi dari badan respons. Tipe data: semua jenis.

Nilai kembali

Tidak tersedia

Contoh

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

Output:

hello
byebyebyebye

exit

Item

Deskripsi

Sintaks

exit(code [, body])

Fitur

Mengakhiri permintaan saat ini dengan kode status HTTP code yang ditentukan. Jika Anda juga mengatur parameter body, respons yang mencakup badan respons yang ditentukan akan dikembalikan.

Parameter

  • code: kode status HTTP yang akan dikembalikan.

  • body: badan respons.

Nilai kembali

Tidak tersedia

Contoh

  • Contoh 1:

    if not($arg_key) {
        exit(403)
    }
    #Catatan: Jika permintaan tidak mencakup parameter key, permintaan ditolak dan kode status HTTP 403 dikembalikan. 
    
    if not($cookie_user) {
        exit(403, 'not cookie user')
    }
    #Catatan: Jika permintaan tidak mencakup 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)
    }