使用 WEB SEND 命令使 CICS ® 组装 HTTP 响应的 HTTP 头,实体主体,状态码和原因短语,执行代码页转换,并将响应传输到 Web 客户机。
关于此任务
需要的话,响应可以分块(分块的传输编码)发送。 您不能将由管道传送的响应发送回 Web 客户机;必须将单个响应发送至由 Web 客户机发送的每个请求。
请参阅 WEB SEND (服务器) 以获取参考信息。
关于该命令,请注意以下几点:
过程
- 根据情形,指定 STATUSCODE 选项为响应选择适当的状态码,并指定 STATUSTEXT 和 STATUSLEN 选项以提供原因短语。
CICS 不会验证您选择的状态码,用户应用程序必须确保该值有效并且符合 HTTP 状态码的规则。
根据您选择的状态码,在发出 WEB SEND 命令之前,您可能需要完成以下部分或所有步骤:
- 检查 Web 客户机请求的 HTTP 版本,以确保可理解状态码。
HTTP/1.1 规范包含的状态码比 HTTP/1.0 规范的状态码多。
- 如果 HTTP 规范规定状态码必须伴有特定 HTTP 头,请使用 WRITE HTTPHEADER 命令以创建这些头。
- 如果 HTTP 规范规定状态码必须伴有提供特殊信息的消息体,请创建适当的实体主体。
如果状态码指示错误或从客户机请求进一步操作,您通常需要特殊信息。
不允许消息体具有状态码 204、205 和 304。 如果选择了不允许消息体的状态码,并且尝试使用消息体,那么 CICS 会向 WEB SEND 命令提供错误响应。
- 通过指定 DOCTOKEN 选项 (对于您已创建的 CICS 文档) 或 FROM 选项 (对于您已组装的数据主体) 来标识响应的任何实体主体的源。 如果使用 FROM 选项,那么指定 FROMLENGTH 选项给出实体主体或块(如果使用分块的传输编码)的长度。
对于分块的传输编码,您不能使用 DOCTOKEN 选项。
- 使用 MEDIATYPE 选项指定响应主体的介质类型。
CICS 不会针对数据内容检查规范的有效性。
MEDIATYPE 没有缺省值。 如果未指定此属性,那么 CICS 不会为响应构建 Content-Type 头。
- 如果要立即发送消息,而不是在任务结束时发送(这是缺省值),那么为 ACTION 选项指定 IMMEDIATE。
如果您正在使用分块的传输编码,那么 IMMEDIATE 是缺省值,因此不需要进行此选择。
一个任务中只能发送一个响应。 它可以是使用一条 WEB SEND 命令的标准响应,或是使用 WEB SEND 命令序列的分块响应。
- 如果要在发送响应后关闭连接,那么为 CONNECTION 选项指定 CLOSE。
CICS 在响应上写入 Connection: close 头,这将通知 Web 客户机连接已关闭,并且无法发送更多请求。 对于处于 HTTP/1.0 级别的 Web 客户机, CICS 通过省略 Connection: keep-Alive 头来实现相同的效果。
- 为消息体的代码页转换指定适当的设置。
- SERVERCONV 选项提供代码页转换的全部控制。 使用它指定是否进行代码页转换。
对于作为 HTTP 服务器的 CICS ,为了与先前发行版中编码的 Web 感知应用程序兼容,如果指定了另一个代码页转换选项,但未指定 SERVERCONN ,那么将采用代码页转换。 如果您想要防止代码页转换,请指定 SERVERCONV(NOSRVCONVERT) 或省略所有代码页转换选项。
- 如果要进行代码页转换,但 CICS 选择的字符集不合适,请使用 CHARACTERSET 选项来指定替代项。
缺省情况下, CICS 使用来自 Web 客户机的原始请求的 Content-Type 头中指定的字符集。 如果该字符集不受支持或未声明,那么 CICS 将改为使用 ISO-8859-1 字符集。
Web 客户机可以在 Accept-Charset 头中指定备用的可接受字符集。 如果您希望指定其中一个字符集,那么您的应用程序必须分析头(可能包括指示 Web 客户机首选项的质量值),并选择适当的受支持字符集。
CICS 不支持 IANA 指定的所有字符集。
HTML 编码字符集 列出了 CICS 支持用于代码页转换的 IANA 字符集。
- 如果要进行代码页转换,并且正在使用 FROM 选项来指定消息体,请使用 HOSTCODEPAGE 选项来标识应用程序的代码页,如果这 不是 LOCALCCSID 系统初始化参数中指定的本地 CICS 区域的缺省代码页。
如果您正在使用 CICS 文档 (DOCTOKEN 选项) ,那么 CICS 会从 CICS 文档域的文档主机代码页记录中标识该文档的主机代码页。
对于指定非文本介质类型的消息,不进行代码页转换,除非您不指定 SERVERCONV;在这种情况下,出于兼容目的,将不考虑介质类型。
HTTP 头和状态行始终由 CICS 转换为 ISO-8859-1 字符集。
- 如果您正在使用分块的传输编码 (或分块) ,那么除了本主题中的基本指示信息外,请遵循 使用分块的传输编码发送 HTTP 请求或响应中的特殊指示信息。
您必须确保正确遵循了该主题中描述的过程,以便接收方可接受分块消息。 分块的消息是使用具有特殊选项的 WEB SEND 命令的多个实例发送的。