全部产品
Search
文档中心

Edge Security Acceleration:Fungsi pemrosesan permintaan

更新时间:Jun 21, 2025

Topik ini menjelaskan sintaksis, deskripsi, parameter, dan nilai balikan dari fungsi pemrosesan permintaan, serta menyertakan contoh penggunaannya.

add_req_header

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisadd_req_header(name, value [, append])
DeskripsiMenambahkan header permintaan ke permintaan sebelum mereka dialihkan ke server asal.
Parameter
  • name: nama header permintaan yang ingin ditambahkan. Tipe data: string.
  • value: nilai header permintaan yang ingin ditambahkan. Tipe data: string.
  • append: menentukan apakah akan menambahkan header permintaan dengan value tertentu 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 balikanMengembalikan 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 telah 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 termasuk dalam permintaan yang dialihkan ke server asal.

del_req_header

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisdel_req_header(name)
DeskripsiMenghapus header permintaan dari permintaan sebelum mereka dialihkan ke server asal.
Parametername: nama header permintaan yang ingin dihapus. Tipe data: string.
Nilai balikanMengembalikan 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 telah 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 termasuk dalam permintaan yang dialihkan ke server asal.

add_rsp_header

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisadd_rsp_header(name, value [, append])
DeskripsiMenambahkan header respons.
Parameter
  • name: nama header respons yang ingin ditambahkan. Tipe data: string.
  • value: nilai header respons yang ingin ditambahkan. 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 ngx.var.x.
    • @{y}: diganti dengan nilai dari header respons y.
  • append: menentukan apakah akan menambahkan header respons dengan value tertentu 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 balikanMengembalikan 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 telah 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 termasuk dalam respons.

del_rsp_header

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisdel_rsp_header(name)
DeskripsiMenghapus header respons.
Parametername: nama header respons yang ingin dihapus. Tipe data: string.
Nilai balikanMengembalikan 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 telah 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 termasuk dalam respons.

encode_args

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisencode_args(d)
DeskripsiMengonversi pasangan k/v dalam kamus yang ditentukan oleh d menjadi string terkode URI dalam format k1=v1&k2=v2.
Parameterd: kamus yang ingin dikonversi.
Nilai balikanMengembalikan 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-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 telah 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

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisdecode_args(s)
DeskripsiMengonversi string terkode URI dalam format k1=v1&k2=v2 menjadi string tipe kamus.
Parameters: string yang ingin dikonversi.
Nilai balikanMengembalikan 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-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 telah 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

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisrewrite(url, flag, code)
DeskripsiMelakukan operasi 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 setelah operasi rewrite.
    • Jika Anda mengatur parameter flag ke enhance_redirect atau enhance_break, URI dan parameter ditulis ulang. Parameter ini menentukan URI dan parameter 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 balikan
  • Mengembalikan true secara default untuk operasi rewrite.
  • Tidak mengembalikan nilai secara default untuk operasi redirect.
Contoh
if and($arg_mode, eq($arg_mode, 'rewrite:enhance_break')) {
  rewrite('/example/examplefile.txt?k=v', 'enhance_break')
}
Catatan: URI dan parameter permintaan yang dialihkan ke server asal ditulis ulang ke /example/examplefile.txt?k=v

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)
}
Catatan: Redirect 302 atau 301 ke /example/examplefile.txt? dilakukan.k=v

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

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)
}
Catatan: Redirect 302 atau 301 ke /example/examplefile.txt dilakukan dan parameter asli tetap tidak berubah.

say

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksissay(arg)
DeskripsiMencetak badan respons dan menambahkan karakter baris baru di akhir output.
Parameterarg: isi dari badan respons. Tipe data: semua jenis.
Nilai balikanTidak ada.
Contoh
say('hello')
print('byebye')
print('byebye')

Output:
hello
byebyebyebye

print

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisprint(arg)
DeskripsiMencetak badan respons. Fungsi ini berbeda dari fungsi say(). Fungsi ini tidak menambahkan baris baru di akhir output.
Parameterarg: isi dari badan respons. Tipe data: semua jenis.
Nilai balikanTidak ada.
Contoh
say('hello')
print('byebye')
print('byebye')

Output:
hello
byebyebyebye

exit

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisexit(code [, body])
DeskripsiMengakhiri permintaan saat ini dengan 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 balikanTidak ada.
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)
    }

get_rsp_header

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisget_rsp_header(str)
DeskripsiMendapatkan header respons.
Parameterstr: header respons yang ingin diperoleh. Tipe data: string.
Nilai balikanMengembalikan header respons yang ditentukan dengan tipe data string, angka, kamus, atau Boolean.
  • Jika header respons yang ditentukan ada, header respons tersebut dikembalikan. Tipe data dari header respons adalah kamus 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

Tabel berikut menampilkan detail fungsi ini.
ItemDeskripsi
Sintaksisadd_rsp_cookie(k, v [,properties])
DeskripsiMenetapkan 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 balikanNilai true dikembalikan jika cookie yang ditentukan disetel dan nilai false dikembalikan jika cookie yang ditentukan gagal disetel.
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