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