JAVA全系列 教程
3762个小节阅读:7092.7k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
通常我们的程序是从 Rewrite 阶段才开始处理请求,而在这之前的 Preread 阶段 OpenResty 己经“预先”从客户端获取了一些基本的信息,包括来源、起始时间和请求头文本,并准备了一个存放临时数据的位置供我们随后使用。
函数 ngx req.is internal 用来判断本次请求是否是由“外部”发起的
xxxxxxxxxx
is_internal = ngx.req.is_internal () 检查是否是一个 “内部” 请求
函数 ngx req start time 可以获取服务器开始处理本次请求时的时间戳,精确到毫秒,使用它可以随时计算出请求的处理时间,相当于♀ request time 但更廉价。例如
xxxxxxxxxx
local request_time = ngx.now () - ngx.req.start_time ()
函数 ngx .req.raw_header 可以获得 HTTP 请求头的原始文本
xxxxxxxxxx
local h = ngx.req.raw_header () 获取请求头原始字符串
OpenResty 把请求处理划分成“ rewrite ,,“ access ”“ content ”等若干个阶段个阶段执行的都是彼此独立的程序,由于作用域的原因内部变量不能共用,如果想要在各个阶段间传递数据就需要使用 ngx.ctx ,它比仅能存储字符串的
ngx.var.xxx 更灵活。
xxxxxxxxxx
rewrite_by_lua_block { -- rewrite 阶段
local len = ngx.var.content length -- 使用变量获取文本长度
ngx.ctx.len = tonumber(len) -- 转换为数字,存入 ctx
}
content_by_lua_block { -- content 阶段
ngx.say( ngx.ctx.len ) -- ngx ctx 里的变量在其他阶段仍然可用
}