局部变量的名称由字母和下划线组成,是script脚本在执行过程中用set指令或赋值符号“=”设置的变量,其寿命周期是从变量被创建之后到该HTTPMsg被销毁这段期间,而HTTPMsg则是用户HTTP请求到达时创建,成功返回Response后被摧毁。
配置变量是JSon格式的配置文件中定义的Key-Value对中,以Key为名称的变量,变量的值是设置的Value内容。在配置文件中位于Location、Host、Listen下定义的Key-Value赋值语句对,左侧为变量名,右侧为变量值,用$符号可以直接引用这些变量定义的内容;在Listen、Host、Location下定义的配置变量,主要是以系统中可能使用到的常量定义为主,这些常量定义也可以使用script脚本来动态定义其常量值,此外,用户可以额外定义系统配置中非缺省常量,我们称之为动态配置变量。
参数变量是系统预定义的有固定名称的一种变量类型,参数变量一般指向HTTP请求的各类信息、eJet系统定义的全局变量等。参数变量的名称是eJet系统预先定义并公布,但大部分变量的内容是跟HTTP请求HTTPMsg相关的,即不同的请求HTTPMsg,参数变量名的值也是随着变化的。一般要求,参数变量是只读不可写变量,即参数变量的值不能被脚本程序改变,只能读取访问。
4.4 预定义的参数变量列表和实现原理
相比其他三种变量,参数变量是被使用最多、最有访问价值的变量,参数变量是系统预先定义的固定名称变量,变量的值是随着HTTP请求HTTPMsg的不同而不同。通过参数变量,配置文件中可以根据请求的信息,灵活动态地决定相关配置选项的赋值内容,从而扩展eJet服务器的能力,减少因额外功能扩展升级eJet系统的定制开销。
参数变量一般由eJet系统预先定义发布,其变量的值内容是跟随HTTP请求HTTPMsg的变化而变化,但变量名称是全局统一通用,所以参数变量也有时称为全局变量。
eJet系统预定义的参数变量如下:
remote_addr – HTTP请求的源IP地址
remote_port – HTTP请求的源端口
server_addr – HTTP请求的服务器IP地址
server_port – HTTP请求的服务器端口
request_method – HTTP请求的方法,如GET、POST等
scheme – HTTP请求的协议,如http、https等
host_name – HTTP请求的主机名称
request_path – HTTP请求的路径
query_string – HTTP请求的Query参数串
req_path_only – HTTP请求的只含目录的路径名
req_file_only – HTTP请求路径中的文件名称
req_file_base – HTTP请求路径中的文件基本名
req_file_ext – HTTP请求路径中文件扩展名
real_file – HTTP请求对应的真实文件路径名
real_path – HTTP请求对应的真实文件所在目录名
bytes_recv – HTTP请求接收到的客户端字节数
bytes_sent – HTTP响应发送给客户端的字节数
status – HTTP响应的状态码
document_root – HTTP请求的资源位置根路径
fastcgi_script_name – HTTP请求中经过脚本运行后的DocURI的路径名
content_type – HTTP请求的内容MIME类型
content_length – HTTP请求体的内容长度
absuriuri – HTTP请求的绝对URI
uri – HTTP请求源URI的路径名
request_uri – HTTP请求源URI内容
document_uri – HTTP请求经过脚本运行后的DocURI内容
request – HTTP请求行
http_user_agent – HTTP请求用户代理
http_cookie – HTTP请求的Cookie串
server_protocol – HTTP请求的协议版本
ejet_version – eJet系统的版本号
request_header – HTTP请求的头信息数组,通过带有数字下标或请求头名称的中括号来访问
cookie – HTTP请求的Cookie数组,通过带有数字下标或Cookie名称的中括号来访问
query – HTTP请求的Query参数数组,通过带有数字下标或参数名称的中括号来访问