add_req_header | del_req_header | add_rsp_header | del_rsp_header | encode_args | decode_args | rewrite | say | print | exit
add_req_header
專案 | 描述 |
文法 | add_req_header(name, value [, append])。
|
說明 | 添加要求標頭,即回源要求標頭。 |
參數 | |
傳回值 | 預設返回true,無效要求標頭返回false。 |
樣本 | 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')
添加2個要求標頭: USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x
說明 USER-DEFINED-REQ-2先添加、後刪除,故要求標頭中無USER-DEFINED-REQ-2。
|
del_req_header
專案 | 描述 |
文法 | del_req_header(name)。
|
說明 | 刪除要求標頭,即回源要求標頭。 |
參數 | name:待刪除的要求標頭name,字元類型。 |
傳回值 | 預設返回true,無效要求標頭返回false。 |
樣本 | 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')
添加2個要求標頭: USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x
說明 分別向要求標頭中添加USER-DEFINED-REQ-1: 1、USER-DEFINED-REQ-1: x和USER-DEFINED-REQ-2: 2,由於USER-DEFINED-REQ-2被刪除,故要求標頭中無USER-DEFINED-REQ-2。 |
add_rsp_header
專案 | 描述 |
文法 | add_rsp_header(name, value [, append])。
|
說明 | 添加回應標頭。 |
參數 | |
傳回值 | 預設返回true,無效回應標頭返回false。 |
樣本 | 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')
輸出2個回應標頭: USER-DEFINED-RSP-1:1
USER-DEFINED-RSP-1:x
說明 USER-DEFINED-RSP-2先添加、後刪除,故回應標頭中無USER-DEFINED-RSP-2。
|
del_rsp_header
專案 | 描述 |
文法 | del_rsp_header(name)。
|
說明 | 刪除回應標頭。 |
參數 | name:待刪除的回應標頭name,字元類型。 |
傳回值 | 預設返回true,無效回應標頭返回false。 |
樣本 | 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')
輸出2個回應標頭: USER-DEFINED-RSP-1:1
USER-DEFINED-RSP-1:x
說明 分別向回應標頭中添加USER-DEFINED-REQ-1: 1、USER-DEFINED-REQ-1: x和USER-DEFINED-REQ-2: 2,由於USER-DEFINED-REQ-2被刪除,故回應標頭中無USER-DEFINED-REQ-2。 |
encode_args
專案 | 描述 |
文法 | encode_args(d)。
|
說明 | 將字典d中的k/v,轉換為URI編碼的k1=v1&k2=v2格式的字串。 |
參數 | d:字典類型。 |
傳回值 | 返回URI編碼格式的字串。 |
樣本 | 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'))
}
輸出3個回應標頭: 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
專案 | 描述 |
文法 | decode_args(s)。
|
說明 | 將URI編碼的k1=v1&k2=v2格式的字串,轉換為字典類型。 |
參數 | s:目標字串。 |
傳回值 | 返迴轉換後的字典對象。 |
樣本 | 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'))
}
輸出3個回應標頭: 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
專案 | 描述 |
文法 | rewrite(url, flag, code)。
|
說明 | 改寫操作或重新導向操作。 |
參數 | |
傳回值 | 對於改寫操作,預設返回true。 對於重新導向操作,預設不返回。
|
樣本 | if and($arg_mode, eq($arg_mode, 'rewrite:enhance_break')) {
rewrite('/a/b/c.txt?k=v', 'enhance_break')
}
#說明:回源和緩衝的uri+參數,修改為/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)
}
#說明:302或301跳轉至/a/b/c.txt?k=v
if and($arg_mode, eq($arg_mode, 'rewrite:break')) {
rewrite('/a/b/c.txt', 'break')
}
#說明:回源和緩衝的uri,修改為/a/b/c.txt,保持原參數不變
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)
}
#說明:302或301跳轉至/a/b/c.txt,保持原參數不變
|
say
專案 | 描述 |
文法 | say(arg)。
|
說明 | 輸出響應體,並在行尾追加分行符號。 |
參數 | arg:任意類型。 |
傳回值 | 無。 |
樣本 | say('hello')
print('byebye')
print('byebye')
輸出: hello
byebyebyebye
|
print
專案 | 描述 |
文法 | print(arg)。
|
說明 | 輸出響應體與say()相同,但不會在行尾追加分行符號。 |
參數 | arg:任意類型。 |
傳回值 | 無。 |
樣本 | say('hello')
print('byebye')
print('byebye')
輸出: hello
byebyebyebye
|
exit
專案 | 描述 |
文法 | exit(code [, body])。
|
說明 | 以狀態代碼code結束當前請求。若有body,則為響應體。 |
參數 | |
傳回值 | 無。 |
樣本 | 樣本1 if not($arg_key) {
exit(403)
}
#說明:如果請求未攜帶參數key時,403拒絕請求。
if not($cookie_user) {
exit(403, 'not cookie user')
}
#說明:當請求未攜帶cookie user時,403拒絕請求,響應body為'not cookie user'
if not(0) {
exit(403)
}
#說明:not(0)的結果為false
if not(false) {
exit(403)
}
#說明:not(false)的結果為true
樣本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)
}
|