处理请求
【E2EE文档】

处理请求

用户请求处理通常是服务器最核心的功能,您可以从用户请求中获取到所有您需要的信息。

请求对象类型为“服务器请求”,通过在视图函数中调用“取回请求对象”命令获取。

本章节目录:

  1. 用户请求处理
  2. 请求对象扩展功能
  3. 常用请求头列表

1. 用户请求处理

1.1 获取用户地址端口

服务器请求.取用户地址()
服务器请求.取用户端口()

得到的用户地址通常为客户IP地址。端口为传送数据的临时端口。

1.2 获取HTTP头部信息

服务器请求.取请求头(请求头名称)

可以获取客户提交的请求中的HTTP头部信息,返回头部内容文本。请求头名称允许不区分大小写。常用的请求头信息请参考本章节后边的“常用请求头列表”。


获取客户当前请求的类型,可以用:

服务器请求.取请求类型()

能够返回大写命名的请求类型,E2EE支持以下请求类型:

  • GET : 请求获取Request-URI所标识的资源
  • POST : 在Request-URI所标识的资源后附加新的数据
  • HEAD : 请求获取由Request-URI所标识的资源的响应消息报头
  • PUT : 请求服务器存储一个资源,并用Request-URI作为其标识
  • DELETE : 请求服务器删除Request-URI所标识的资源
  • TRACE : 请求服务器回送收到的请求信息,主要用于测试或诊断
  • CONNECT : 暂时未使用
  • OPTIONS : 请求查询服务器的性能,或者查询与资源相关的选项和需求

获取客户请求的HTTP版本号:

服务器请求.取请求版本号()

返回HTTP版本信息,目前仅支持 1.0 和 1.1。

1.3 获取用户请求参数

E2EE为了使您使用方便,用户POST/GET请求参数、地址参数以及RESFful网址处理生成的参数等都认为是平等的,最大化减少命名歧义。

获取参数的方式为:

服务器请求.取参数(参数名)

返回参数文本内容。


您可以可以一次取回所有请求参数,用以下命令:

服务器请求.取所有参数()

返回所有参数组成的 存取键值表 对象。注意,此时是区分大小写的。

通过返回所有请求参数命令获取数据时,当请求参数为多项时,数据会自动组装成存取列表,使用同名多值的时候务必注意区分。请求对象在处理请求前是不知道您同名的参数个数的。

首先看看正常的情况。

请求地址:

http://localhost/?type=2&user=1

取所有参数展开文本:

{
    type:       2
    user:       1
}

接下来看看同名多值的典型情况。

请求地址:

http://localhost/?type=2&user=1&user=3&user=4

取所有参数展开文本:

{
    type:       2
    user:       [1, 3, 4]
}

1.4 获取用户Cookies

服务器请求.取Cookies()

返回 存取键值表 对象,键值均为文本,取cookies是不会存在同名多值的情况的,遇到同名必然是后边值替换前边值。

1.5 获取用户上传文件

服务器处理用户上传文件时,会预先将用户上传的文件存储到“临时”目录,使用文件时请务必将文件转移到您需要的位置,不需要时请删除。

服务器请求.取上传文件(表单项名称)

返回文件存储在“临时”目录下的绝对路径,名称为临时文件名,文件后缀沿用原文件后缀名。使用请转移到您的目标位置,不使用请删除。

参数表单项名称为上传文件表单项的“name”名称。例如:

<form method="POST" action="{{_模块路径}}/add_book" enctype="multipart/form-data">
    ...
    <input name="image_file" type="file">
    ...
    <input type="submit" value="上传" />
</form>

上传后的表单项名称为“image_file”,您可以通过这个名称获取到文件的路径。


如果您需要获取文件原始名称等信息,可以使用取所有上传文件命令:

服务器请求.取所有上传文件()

返回的是 存取列表。注意是列表,此时的列表展开形式如下:

[
    {
        name:       文件表单项名称
        filename:   文件原始文件名
        file:       文件上传后存到“临时”目录的绝对路径
    }
    {
        name:       ...
        filename:   ...  [第二个文件的信息]
        file:       ...
    }
]

如果用户上传的图片等允许在浏览器查看或下载,请移动文件到“网页”目录下您专门用于存储上传文件的目录,便于用户能够通过网址访问到。

移动文件时务必注意Windows单目录存储文件的数量等问题,建议您可以通过业务信息的ID做 取模运算 或者 通过当前时间 月份或日期 等方式建立目录对文件做存储。

“临时”目录和“网页”目录位置的配置请参考之前的配置章节。

1.6 获取和设置用户Session

Session是由服务器创建,您可以通过Session对当前客户获取和设置一些内容,便于做一些基于用户的流程处理等操作,典型场景是用户登录。具体您可以点击这里查看Session的详细说明。

设置Session:

服务器请求.置Session值([名称], [值])

名称和值参数均为文本型。

获取Session:

服务器请求.取Session值([名称])

E2EE针对Session的管理是类似PHP的管理方式,每个用户的信息会建立专门的文件用来做存储。

E2EE允许您使用自定义的方式处理Session。

您可以通过下面的方式获取Session的ID,通过ID自己决定怎么存储和获取Session内容。

服务器请求.取SessionID()

返回服务器内部给用户标记的ID。此ID永远不为空,如果多服务器处理时,您可以通过对这个ID做封装,将用户信息存储在 Memcache、Redis或者数据里做管理。

1.7 获取用户提交数据

获取GET和POST的参数请使用 取参数() 命令。

获取用户POST提交的原始数据(XML/JSON/二进制)等原始数据:

服务器请求.取发送数据()

返回用户发送的原始数据字节集。

1.8 URL编码/解码

对URL进行编解码(编码格式自动使用服务器的编码格式):

服务器请求.URL编码()
服务器请求.URL解码()

1.9 获取容器相对路径

获取当前服务器的容器路径(专业术语Servlet Path):

服务器请求.取模块路径()

主要用于容器化技术中获取容器给当前服务器模块定义的相对访问路径。如果是主服务器或者容器服务器,返回的将为空文本。

2. 请求对象扩展功能

除了基础用户请求处理外,请求对象也包含一些自己特有的功能。

2.1 传值用属性表

在全局函数中或者其他方式处理请求时,可能需要将一些数据传递到最终的视图请求中,此时可以使用请求对象的“属性表”用来存储需要传递的信息。

服务器请求.属性表()

返回一个存储键值表对象。这个键值表对象最特别的地方在于,它是绑定在 请求对象中的,所以对同一个请求对象,任何地方操作属性表时,都是同步的。

2.2 检测和获取“标签”

检测当前请求路径是否包含指定标签:

服务器请求.是否包含标签([标签名])

获取当前请求路径包含的所有标签:

服务器请求.取标签列表()

返回一个纯文本的 存取列表 对象,所有值都是文本型。

标签名称是在服务器注册视图函数的时候携带的“标签”参数。

2.3 获取服务器配置

为了便于您的使用,请求对象可以直接获取服务器配置信息。

服务器请求.取配置项([配置项名称])

返回的结果跟 服务器.取配置项 返回结果一样,返回服务器配置内容,包括服务器加载的“包含文件”中的配置内容。具体请参考“创建网站和配置”章节。

同样也包含了取配置文本方法:

服务器请求.取配置文本()

返回包含所有配置内容的文本。

2.4 获取服务器映射中心

同样和服务器的功能是一样的。

服务器请求.取对象映射中心()

关于映射中心的详细说明请查看后面的章节。

3. 常用请求头列表

请求头 解释 示例
Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html
Accept-Charset 浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5
Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 Accept-Encoding: compress, gzip
Accept-Language 浏览器可接受的语言 Accept-Language: en,zh
Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Accept-Ranges: bytes
Authorization HTTP授权的授权证书 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
Connection 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) Connection: close
Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 Cookie: $Version=1; Skin=new;
Content-Length 请求的内容长度 Content-Length: 348
Content-Type 请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded
Date 请求发送的日期和时间 Date: Tue, 15-Nov-17 08:12:31 GMT
Expect 请求的特定的服务器行为 Expect: 100-continue
From 发出请求的用户的Email From: user@email.com
Host 指定请求的服务器的域名和端口号 Host: www.jimstone.com.cn
If-Match 只有请求内容与实体相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag If-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards 限制信息通过代理和网关传送的时间 Max-Forwards: 10
Pragma 用来包含实现特定的指令 Pragma: no-cache
Proxy-Authorization 连接到代理的授权证书 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range 只请求实体的一部分,指定范围 Range: bytes=500-999
Referer 先前网页的地址,当前请求网页紧随其后,即来路 Referer: http://www.jimstone.com.cn/english/
TE 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 TE: trailers,deflate;q=0.5
Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-Agent User-Agent的内容包含发出请求的用户信息 User-Agent: Mozilla/5.0 (Linux; X11)
Via 通知中间网关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning