在线文档教程

mod_esi

mod_esi

模块

mod_esi

模块摘要

Erlang 服务器接口

描述

该模块定义了 Erlang 服务器接口(ESI)API。这是为您的InetsWeb 服务器编写 Erlang 脚本比将其作为常用 CGI 脚本编写更有效的方式。

数据类型

以下数据类型用于 mod_esi 的函数中:

env() =

{EnvKey()::atom(), Value::term()}

目前支持的键值对

{server_software, string()}

指示 INTS 版本。

{server_name, string()}

本地主机名。

{gateway_interface, string()}

CGI 中使用的遗留字符串,只需忽略。

{server_protocol, string()}

http 版本,目前为“HTTP/1.1”

{server_port, integer()}

服务器端口号。

{request_method, "GET | "PUT" | "DELETE" | "POST" | "PATCH"}

http 请求方法

{remote_adress, inet:ip_address()}

客户端的 IP 地址。

{peer_cert, undefined | no_peercert | DER:binary()}

对于使用客户端证书 TLS 连接,这将是一个作为 Erlang 二进制文件的 ASN.1 DER 编码的X509证书。如果未使用客户端证书,则值将为no_peercert,并且如果未使用 TLS(由于网络故障导致HTTP或连接丢失),则值将为undefined

{script_name, string()}

请求 URI

{http_LowerCaseHTTPHeaderName, string()}

例如:{http_content_type,“text / html”}

出口

deliver(SessionID, Data) -> ok | {error, Reason}

类型

此功能用于 Erl Scheme 界面调用的功能,以将部分内容传送给用户。

将来自 Erl Scheme 脚本的数据发送回客户端。

注意

如果脚本添加了任何 HTTP 头字段,则它们必须在第一次调用中deliver/2,并且调用中的数据必须是字符串。标题完成后的调用可以包含二进制数据以减少复制开销。不要假设任何有关数据类型的信息SessionIDSessionID必须是作为您实现的ESI回调函数的输入给出的值。

ESI 回调函数

出口

Module:Function(SessionID, Env, Input)-> {continue, State} | _

类型

Module必须在代码路径中找到并Function以三个元素导出。还erlScriptAlias必须在Web服务器的配置文件中进行设置。

mod_esi:deliver/2应用于生成对客户端的响应,并且SessionID是在调用此函数时应使用的标识符,不要假定有关数据类型的任何内容。这个函数可能会被调用几次来分块响应数据。请注意,发送到客户端的第一个数据块必须至少包含响应将生成的所有HTTP头字段。如果第一个块不包含 HTTP 头结尾,即"\r\n\r\n",服务器假定不会生成HTTP头字段。

Env 请求的环境数据见上面的描述。

Input是 GET 请求的查询数据或 PUT 或 POST 请求的主体。传递正文的默认行为(遗留原因)是整个身体被收集并转换为字符串。但是,如果设置了httpd配置参数max_client_body_chunk,则主体将以二进制块的形式提供。max_client_body_chunk如果使用HTTP分块编码发送主体,那么块的最大大小是由客户端决定的或由客户端决定的。当使用分块机制时,该回调必须返回{continue,State :: term()},其中的所有调用Input都是{first, Data::binary()}{continue, Data::binary(), State::term()}。当Input{last, Data::binary(), State::term()}返回值将被忽略。

注意

请注意,如果主体很小,则所有数据可能只在一个块中传递,然后将使用{last,Data :: binary(),undefined}调用回调,而不用调用{first, Data::binary()}

输入State是最后返回的State,其中回调可以包括处理块时需要跟踪的任何数据。

Module:Function(Env, Input)-> Response

类型

此回调格式消耗大量内存,因为整个响应必须在发送给用户之前生成。此回调格式已弃用。为了新的开发,使用Module:Function/3