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