全部产品
Search
文档中心

CDN:Fungsi pemrosesan permintaan

更新时间:Jul 02, 2025

Topik ini menjelaskan sintaks, deskripsi, parameter, dan nilai pengembalian dari fungsi pemrosesan permintaan, serta memberikan contoh penggunaannya.

add_req_header

Tabel berikut menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksadd_req_header(name, value [, append])
DeskripsiMenambahkan 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 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 pengembalianMengembalikan 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksdel_req_header(name)
DeskripsiMenghapus header permintaan dari permintaan sebelum mereka dialihkan ke server asal.
Parametername: nama header permintaan yang ingin Anda hapus. Tipe data: string.
Nilai pengembalianMengembalikan 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksadd_rsp_header(name, value [, append])
DeskripsiMenambahkan 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 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 pengembalianMengembalikan 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksdel_rsp_header(name)
DeskripsiMenghapus header respons.
Parametername: nama header respons yang ingin Anda hapus. Tipe data: string.
Nilai pengembalianMengembalikan 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksencode_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 Anda konversi.
Nilai pengembalianMengembalikan 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksdecode_args(s)
DeskripsiMengonversi string terkode URI dalam format k1=v1&k2=v2 menjadi string tipe kamus.
Parameters: string yang ingin Anda konversi.
Nilai pengembalianMengembalikan 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksrewrite(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 pengembalian
  • 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintakssay(arg)
DeskripsiMencetak badan respons dan menambahkan karakter baris baru di akhir output.
Parameterarg: isi dari badan respons. Tipe data: semua jenis.
Nilai pengembalianTidak ada.
Contoh
say('hello')
print('byebye')
print('byebye')

Output:
hello
byebyebyebye

print

Tabel berikut menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksprint(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 pengembalianTidak ada.
Contoh
say('hello')
print('byebye')
print('byebye')

Output:
hello
byebyebyebye

exit

Tabel berikut menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksexit(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 pengembalianTidak 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksget_rsp_header(str)
DeskripsiMendapatkan header respons.
Parameterstr: header respons yang ingin Anda dapatkan. Tipe data: string.
Nilai pengembalianMengembalikan header respons yang ditentukan dari tipe data string, angka, kamus, atau Boolean.
  • Jika header respons yang ditentukan ada, header respons tersebut dikembalikan. Tipe data 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 menggambarkan detail fungsi ini.
ItemDeskripsi
Sintaksadd_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 pengembalianNilai 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