ctyun.req.start_time
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | secs = ctyun.req.start_time() |
作用 | 用来获取当前请求创建时的时间戳。 |
入参 | 无。 |
返回值 | secs: number。浮点类型时间戳,单位为秒(小数部分可表示毫秒)。 |
示例:
ctyun.sleep(1)
local request_time = ctyun.now() - ctyun.req.start_time()
ctyun.resp.set_output(tostring(request_time))
结果:1.0030000209808。
ctyun.req.raw_header
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | raw_header_ str = ctyun.req.raw_header(no_request_line?) |
作用 | 用来获取Nginx 服务器接收到的原始 HTTP 协议头。 |
入参 | no_request_line? : bool。no_request_line:可选参数。参数为 true 可以去除结果中的请求行。 |
返回值 | raw_header_str: string。Nginx接收到的原始 HTTP 协议头。 |
示例:
默认时,请求行和末尾的 CR LF 结束符也被包括在内:
local header = ctyun.req.raw_header()
ctyun.resp.set_output(header)
-- 输出:
-- GET /app/detail HTTP/1.1
-- Host: xopen.ctyun.cn:8080
-- User-Agent: curl/7.43.0
-- Accept: */*
可以通过指定可选的 no_request_line 参数为 true 来去除结果中的请求行:
local header_no_request_line = ngx.req.raw_header(true)
ctyun.resp.set_output(header_no_request_line)
-- 输出:
-- Host: xopen.ctyun.cn:8080
-- User-Agent: curl/7.43.0
-- Accept: */*
ctyun.req.get_method
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | method_name = ctyun.req.get_method() |
作用 | 获取当前请求的 HTTP 请求方法名称。结果为类似 "GET" 和 "POST" 的字符串。 |
入参 | 无。 |
返回值 | method_name: string。请求方法名称字符串。 |
示例:
local method = ctyun.req.get_method()
if method ~= 'GET' then
ctyun.resp.exit(403)
end
ctyun.req.get_headers
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | headers, err = ctyun.req.get_headers(max_headers?, raw?, get_dup?) |
作用 | 获取当前请求的所有请求头信息。 |
入参 | max_headers? number。指定获取的最大请求头数量。默认为100,0表示无限制。 raw? boolean。指定是否将请求头名称改为全小写模式。默认为false,默认情况下,将请求头名称改为全小写,并为Lua-table添加一个<可忽略大小写、下划线中划线>的 __index 元方法。get_dup?boolean。是否获取重复头的所有值。默认为false,只取重复头的第一个值,如有两个X-Real-Ip请求头,只获取第一个。 注:区别官方ngx.req.get_headers()增加的参数,若需要获取重复请求头所有数据,设置该参数为true。 |
返回值 | headers: table |
示例:
local h, err = ctyun.req.get_headers()
if err == "truncated" then
-- one can choose to ignore or reject the current request here
end
for k, v in pairs(h) do
-- ...
if type(v) == 'table' then -- 重复头
-- ...
end
end
ctyun.req.set_header
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | ctyun.req.set_header(header_name, header_value) |
作用 | 将当前请求的名为 header_name 的头信息值设置为 header_value,如果此头信息名称已经存在,修改其值。 |
入参 | header_name: string。请求头名称 header_value:可以是string、数组形式或者nil(表示删除) 。 |
返回值 | 无。 |
示例:
设置请求头:
ctyun.req.set_header("Content-Type", "text/css")
支持重复头设置:
ctyun.req.set_header("Foo", {"a", "abc"})
-- 此时会设置重复请求头:
-- Foo: a
-- Foo: abc
清除请求头:
ctyun.req.set_header("Test", nil)
ctyun.req.get_full_body_data
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | data_str = ctyun.req.get_full_body_data() |
作用 | 获取请求体,如果底层nginx保存为文件,也需要解析文件内容。 |
入参 | 无。 |
返回值 | data_str: string。请求体。 |
示例:
if ctyun.req.get_method() == "POST" then
local data_str = ctyun.req.get_full_body_data()
local data, err = ctyun.json.decode(data_str)
-- ......
end
ctyun.req.get_origin_url
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | url_str = ctyun.req.get_origin_url() |
作用 | 获取原始请求url,也就是nginx变量$request_uri的值。 |
入参 | 无。 |
返回值 | url_str: string。原始请求url。 |
示例:
local request_uri = ctyun.req.get_origin_url()
local m, err = ctyun.re.match(request_uri, "^/([^/]+)/.*")
if m[1] == 'path-1' then
ctyun.resp.exit(403)
end
ctyun.req.set_uri
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | ctyun.req.set_uri(uri) |
作用 | 设置回源uri(不包含回源查询参数)。 |
入参 | uri: string。回源uri。 |
返回值 | 无。 |
示例:
local original_uri = ctyun.var('uri')
local new_uri = ctyun.re.sub(original_uri, "^/[^/]+/(.*)", "/$1")
ctyun.req.set_uri(new_uri)
ctyun.req.get_uri_args
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | args, err = ctyun.req.get_uri_args(max_args?) |
作用 | 获取当前请求的 URI 请求参数,以Lua-table的形式给出。 |
入参 | max_args? : number。解析的最大参数个数,默认100;设置为0表示无限制。 |
返回值 | args: table。 err: string。 |
示例:
key 和 value 将根据 URI 编码规则进行解码。 多次出现同一个参数 key 时,将生成一个 Lua table,按顺序保存其所有 value;没有 key 的参数将被忽略。
local args, err = ctyun.req.get_uri_args()
if err == "truncated" then
-- one can choose to ignore or reject the current request here
end
for key, val in pairs(args) do
if type(val) == "table" then
ctyun.resp.set_output(key .. ": " .. table.concat(val, ", "))
else
ctyun.resp.set_output(key .. ": " .. tostring(val))
end
end
ctyun.req.set_uri_args
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | ctyun.req.set_uri_args(args) |
作用 | 重写当前请求的 URI 请求参数。 |
入参 | args: string 。Lua字符串,或key-value类型的Lua table。 |
返回值 | 无。 |
示例:
-- Lua 字符串类型的 args 参数:
ctyun.req.set_uri_args("a=3&b=hello%20world")
-- 或包含请求参数 key-value 对的 Lua table: (此时将根据 URI 转义规则转义参数的 key 和 value)
ctyun.req.set_uri_args({
a = 3,
b = 'hello world'
})
-- 此时请求参数转化为 "a=3&b=hello%20world"(参数在字符串中的顺序不定)。
-- 也支持多值参数:
ctyun.req.set_uri_args({ a = 3, b = {5, 6} })
-- 此时请求参数字符串为 "a=3&b=5&b=6"。
ctyun.req.http_version
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | local ret = ctyun.req.http_version() |
作用 | 获取请求HTTP版本。 |
入参 | 无。 |
返回值 | http_version: string ,Lua字符串。 |
示例:
local ret = ctyun.req.http_version()
-- result:
-- "1.1"
-- "2.0"
-- ......
ctyun.req.set_upstream_url
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | ctyun.req.set_upstream_url(new_url_str) |
作用 | 设置回源url(包含回源查询参数)。 |
入参 | new_url_str: string。回源url。 |
返回值 | 无。 |
示例:
local upstream_url = '/new_path' .. ctyun.var("uri") .. "?type=1&id=2"
ctyun.req.set_upstream_url(upstream_url)
ctyun.req.set_cache
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | ctyun.req.set_cache(cache_host, cache_url, cache_mode, ttl) |
作用 | 设置本次请求的回源结果缓存在cdn中。 |
入参 | cache_host: string。缓存host cache_url:string。缓存url cache_mode: string。固定缓存时间/跟随源站缓存(定值 "fixed" / “follow”)。默认为fixed, 非合法输入初始化为默认值。 ttl: number。缓存时间,单位秒。如果是固定缓存,设置缓存多久; 如果跟随源站也可以设置默认值(秒)。 |
返回值 | 无。 |
示例:
local cache_url = ctyun.var("uri") .. ctyun.var("arg_fileId") -- 保证缓存key与该文件一一对应
local cache_host = ctyun.var("host")
local default_cache_time = 24*3600 -- 单位: 秒
ctyun.req.set_cache(cache_host, cache_url, "follow", default_cache_time)
ctyun.req.enroll_header_back
函数信息详见下表:
项目 | 描述 |
---|---|
语法 | ctyun.req.enroll_header_back(callback_func, ...) |
作用 | 在收到响应头时会回调callback_func函数。 |
入参 | callback_func: function。回调函数 ... : 回调函数的入参:其他任意类型。入参个数可以是不定的。 |
返回值 | 无。 |
示例:
local function func_header_callback(limit_rate)
ctyun.resp.set_header("Test", "new-header")
ctyun.resp.set_limit_rate(limit_rate)
end
ctyun.req.enroll_header_back(func_header_callback, '100K')
则执行该回调函数可以设置添加响应头与限速。