作为 HTTP 服务器的 CICS 的代码页转换
当 CICS® HTTP与网络客户端交换信息时,通常需要对信息正文进行代码页转换。 指定代码页转换的方法取决于您发出的是应用程序生成的响应还是静态响应,以及您使用的是 Web 感知应用程序还是非 Web 感知应用程序。
请求行和 HTTP 头
请求行或状态行的代码页转换、以及 HTTP 头的代码页转换按如下方式处理:
- 收到请求后 CICS 会立即将请求行(包括任何查询字符串)和 HTTP头从字符集转换为 LOCALCCSID 系统初始化参数指定的 EBCDIC 代码页(适用于整个CICS ,默认值为 037)。 要成功进行转换,您应当将 LOCALCCSID 系统初始化参数设置为某一 EBCDIC 代码页 - ASCII Latin-1 字符集 ISO-8859-1(代码页 819)可以转换成该代码页。 如果 LOCALCCSID 被设置成不适当的代码页,那么 CICS 会使用缺省的 EBCDIC 代码页 037。
- 在应用程序使用 WEB EXTRACT、WEB READ HTTPHEADER 或 WEB READ FORMFIELD 命令来抽取请求行(包括所有查询字符串)和 HTTP 头中的信息时,信息会以转换后的格式显示,即采用 LOCALCCSID 系统初始化参数指定的 EBCDIC 代码页(或缺省值 037)显示。
- 当 CICS 准备发送响应时,状态行和 HTTP头可能由 CICS 生成,也可能由应用程序使用WEB WRITE HTTPHEADER命令指定。 在发送前,所有头和状态行从指定的 EBCDIC 代码页转换为 US-ASCII 字符集。
消息体:应用程序生成的响应
如果请求要从用户编写的应用程序获取动态响应,那么消息体的代码页转换按如下方式处理:
- 如果 Web 感知应用程序接收到该请求,那么如果使用任何代码页转换选项在 WEB RECEIVE 命令上指定转换,那么 CICS 将执行代码页转换。 如果这些选项未出现,那么不执行代码页转换。 如果缺省值不适合,您可以提供或允许 CICS 识别字符集,并请求代码页。
- 如果在处理请求时使用分析器程序,那么分析器程序可以为传递到存储器块中后继处理阶段的请求副本指定或禁止代码页转换。 您提供所使用的字符集和应用程序代码。 CICS 仍保存请求主体的原始版本。 使用 EXEC CICS WEB API 命令的应用程序或转换器程序访问的是原始主体,而不是存储器块,而且它们可以通过 EXEC CICS WEB API 命令指定代码页转换。
- 当转换器程序在存储器块中传递请求时,如果处理路径中没有分析器程序,那么 CICS 会转换存储器块中的请求主体,以标识字符集并转换为缺省代码页。
- 为了标识 Web 客户机用于请求主体的字符集, CICS 会检查请求头。 如果请求头未提供此信息,或者指定的字符集不受支持,那么 CICS 假定缺省情况下消息体为 ISO-8859-1 字符集。 如果消息体不是该字符集,且头中没有信息,那么需要识别正确的字符集。
- 缺省情况下, CICS 将请求主体转换为 LOCALCCSID 系统初始化参数指定的 EBCDIC 代码页 (适用于整个本地 CICS 区域,缺省值为 037)。 如果您的应用程序需要另一个代码页(可以是 EBCDIC 或 ASCII),那么您可以指定该代码页。
- 如果应用程序或转换器程序使用 EXEC CICS WEB API 命令发送响应,那么如果使用任何代码页转换选项在 WEB SEND 命令上指定转换,那么 CICS 将执行代码页转换。 如果这些选项未出现,那么不执行代码页转换。
- 如果转换器程序在存储器块中生成响应并将其传递给 CICS 以进行发送,那么 CICS 将对针对请求执行的代码页转换进行镜像。 使用分析器程序的字符集和主机代码页设置,如果没有分析器程序,那么使用缺省设置。 如果分析器程序禁止对请求执行代码页转换,那么不会对响应主体执行代码页转换。
消息体:静态响应
如果请求要获取由 URIMAP 定义确定的静态响应,那么消息体的代码页转换按如下方式处理:
- 对于静态响应, CICS 不会检查 Web 客户机请求中存在的任何消息体,因此不需要代码页转换。
- 您在生成静态响应的 URIMAP 定义中为响应主体指定代码页转换。 如果响应包含文本,那么 URIMAP 定义需要指定所有以下几项:
- 文本介质类型,使用 MEDIATYPE 属性。 该属性没有缺省值。
- Web 客户机的字符集,使用 CHARACTERSET 属性。
- 使用 HOSTCODEPAGE 属性对响应的 CICS 文档模板或 z/OS® UNIX 文件进行编码的代码页。