WEB SEND(服务器)
发送 HTTP 请求或非 HTTP 消息。
语法
条件: CHANNELERR , CONTAINERERR , IOERR , INVREQ , ENGERR 和 NOTFND
此命令是线程安全的。
NOHANDLE、RESP 和 RESP2是常用选项,可添加到所有 EXEC CICS 命令中以处理错误条件。 命令语法图和选项说明中没有明确包含这些选项。 有关这些常用选项和 EXEC CICS 命令语法的信息,请参阅 EXEC CICS 命令格式和编程注意事项.
描述
- 对Web客户端向HTTP CICS 发出的 HTTP的响应。 有关正确使用WEB SEND命令的指南,请参阅 HTTP从 CICS 发送 HTTP 》。
- CICS Web支持工具处理的HTTP 消息,使用TCPIPSERVICE定义中的用户定义(USER)协议。 有关HTTP 消息的指南,请参阅 CICS Web支持和HTTP 请求。
- 对来自另一个应用程序的请求的响应,该应用程序使用 CICS 业务逻辑接口直接联系程序,而不是通过 CICS HTTP 侦听器。 有关 CICS 业务逻辑接口的指导,请参阅使用 CICS 业务逻辑接口进行开发。
在任务期间只能发送一个响应。 这可以是使用一个 WEB SEND 命令的标准响应,也可以是使用一系列 WEB SEND 命令的分块响应。
如果在同一任务期间尝试发送第二个响应,那么结果取决于是否在 WEB SEND 命令中为第一个响应指定了 IMMEDIATE 选项或最终选项。
- 如果将 IMMEDIATE 选项用于第一个响应,那么在尝试第二个响应时将返回错误。
- 如果第一个响应使用了“EVENTUAL”选项,则第二个响应将覆盖第一个响应的组件(状态行 HTTP和消息正文)。 第一个响应丢失,第二个响应发送。
每次收到来自 Web 客户机的请求时, CICS 都会启动新任务来处理该请求。
如果HTTP的正文在发送到服务器之前保存在容器中, CICS 会将正文保存在64位存储中,并从该存储中发送。 如果HTTP的正文保存在应用程序缓冲区中,并且在发送之前需要复制或转换, CICS 会将正文保留在64位存储中,并从64位存储中发送。 但是,当发送文档时,将在 31 位存储器中处理该文档。
选项
- 操作(cvda)
- 指定应如何发送消息。 HTTP , CICS 所适用的CVDA值如下:
- IMMEDIATE
- 将响应立即发送到 Web 客户机。 如果指定了 CHUNKING ,那么将采用 IMMEDIATE 选项。
- 最终
- 在任务结束时将响应发送到 Web 客户机。 如果指定了 CHUNKING ,那么将忽略最终选项。 对于不使用分块传输编码的消息发送,最终是缺省值。
- CHANNEL(数据值)
- 指定容器所属的通道的名称。 通道的名称最多可包含 16 个字母数字字符,包括相应的标点符号。 不允许前导空白和嵌入空白。 如果名称少于 16 个字符,那么将使用尾部空格来填充该名称。 可以指定通道名称 DFHTRANSACTION 以使用事务通道。
如果指定了 CONTAINER 选项,那么 CHANNEL 是可选的。
如果未指定 CHANNEL 选项,那么 CICS 将采用当前通道。
- CHARACTERSET(数据值)
- 指定一个字符集, CICS 在发送之前将命令发送的项的实体主体转换为该字符集。 字符集的名称最多可包含 40 个字母数字字符,包括相应的标点符号。 CICS 不支持 IANA 指定的所有字符集。 HTML 编码字符集 列出了 CICS 支持进行代码页转换的 IANA 字符集。
当指定了 CHARACTERSET 选项时,将采用 SRVCONVERT ,因此将进行实体主体的代码页转换。 作为自己选择字符集的替代方法,指定 SRVCONVERT 和/或 HOSTCODEPAGE (如果允许) ,并省略 CHARACTERSET ,让 CICS 确定适合消息体的字符集。 SERVERCONV 选项的描述告诉您在这种情况下会发生什么。
如果省略所有代码页转换选项,那么不会进行代码页转换。
- CHUNKING(cvda)
- 用于在消息以分块 (称为分块传输编码) 发送时控制消息发送。 未指定此选项时,缺省情况是未使用分块的传输编码。 分块传输编码仅适用于 HTTP/1.1 客户端,不能用于 HTTP/1.0 客户端或HTTP 消息。
分块消息的内容可以以应用程序最方便的任何方式划分为块。 无法直接从 CICS 文档构成分块消息的主体,因此无法使用 DOCTOKEN 选项。
对消息的每个块使用带有 CHUNKYES 选项的单独 WEB SEND 命令。 使用 FROM 选项来指定数据块,使用 FROMLENGTH 选项来指定数据块的长度。 可以在序列的第一个 WEB SEND 命令 (发送第一个区块) 上指定消息的其他选项,例如 CLOSESTATUS 选项,但不要在后续命令 (发送第二个区块和后续区块) 上指定这些选项。
当您发送最后一个数据块时,指定另一个带有 CHUNKEND 选项且没有 FROM 或 FROMLENGTH 选项的 WEB SEND 命令。 然后, CICS 将空块发送给收件人以完成分块的消息。
如果其中一个 WEB SEND 命令在序列期间失败,那么将返回错误响应,并且后续发送也将失败。 应用程序应适当处理此情况。 如果成功发送所有块,但应用程序未发出带有 CHUNKEND 选项的最终 WEB SEND 命令,那么事务将异常终止,异常终止代码为 AWBP。 不完整的分块消息应被收件人忽略并废弃。
发送带有分块传输编码HTTP或响应时,应遵循分块传输编码的完整描述,以便您的分块消息能够被接收方接受。
CVDA 值包括:- CHUNKNO
- 分块传输编码不用于消息。 如果未指定 CHUNKING 选项,那么这是缺省值。
- CHUNKYES
- 分块传输编码正在进行中。 FROM 选项指定的数据表示消息的块。
- CHUNKEND
- 分块传输编码已完成。 没有为此发送指定任何数据。 CICS 向收件人发送空块以完成分块消息。
如果使用的是 CONTAINER 选项,请勿指定 CHUNKING 选项。 无法从容器发送分块响应。
- CLNTCODEPAGE(数据值)
- 仅出于升级目的支持此选项。 CHARACTERSET 替换了它。 对于这两个关键字, CICS 执行的操作相同。
- CLOSESTATUS(cvda)
- 指定 CICS 在发送消息后是否关闭连接。 缺省情况是未关闭连接。 CVDA 值为:
- 关闭
- CICS 为此响应写入带有 "close" 连接选项 (Connection: close) 的 Connection 头,并在发送响应后关闭与 Web 客户机的连接。 头通知 Web 客户机关闭。 (对于处于 HTTP/1.0 级别的 Web 客户机, CICS 通过省略 Connection: keep-Alive 头来实现相同的效果。)
如果正在使用分块的传输编码,那么可以在消息的第一个块上指定 CLOSE 选项,以通知 Web 客户机在分块的消息完成后关闭连接。
- 未关闭
- 表示 Connection: close 头不用于此响应,并且连接保持打开。 如果 Web 客户机标识为 HTTP/1.0 ,并且已发送带有 "Keep-Alive" 连接选项 (Connection: Keep-Alive) 的 Connection 头,那么 CICS 将发送相同的头,以通知将维护持久连接。
- CONTAINER(数据值)
- 指定 HTTP在发送到服务器之前所在的容器的名称。 容器的名称最多可以包含 16 个字母数字字符,包括相应的标点符号。 不允许前导空白和嵌入空白。 如果名称短于 16 个字符,那么将使用尾部空格来填充该名称。
当指定了CONTAINER时, CICS 将 HTTP存储在64位存储器中,并从该存储器中发送。
- DOCSTATUS(cvda)
- 指示在处理 WEB SEND 命令期间是否应该删除文档。 CVDA 值为:
- DOCDELETE
- 保存文档内容以进行发送后, CICS 会删除该文档。 将立即释放为文档分配的存储空间。 如果对文档发出后续请求,那么这些请求将生成 NOTFND 响应。
- NODOCDELETE
- 在处理 WEB SEND 命令期间, CICS 不会删除文档。 这是 DOCSTATUS 的缺省值。
- DOCTOKEN(数据值)
- 指定要作为消息体发送的文档的 16 字节二进制令牌。 该文档是使用 CICS 文档接口通过 EXEC CICS DOCUMENT CREATE, INSERT和 SET 命令创建的。 FROM 选项提供了创建消息体的替代方法。
分块消息的主体不能由 CICS 文档构成,因此 DOCTOKEN 选项不能用于分块的传输编码。
指定 DOCTOKEN 时,将在 31 位存储器中处理文档。
- FROM(数据区)
- 指定保存完整消息体或消息体块的数据缓冲区。 消息体由应用程序构建。 指定 FROM 选项时,请使用 FROMLENGTH 选项来指定数据缓冲区的长度。 DOCTOKEN 选项提供了创建消息体的替代方法,但该选项不能用于分块消息的主体。
当指定 FROM 时,如果 CICS 需要在发送前复制或转换 HTTP ,则主体将在 64 位存储中复制或转换,并从 64 位存储中发送。
对于数据区的大小没有设置最大限制,但其大小在实践中受到存储注意事项的限制。 为 HTTP生成实体体时,会有更多相关信息。
- FROMLENGTH(数据值)
- 指定在 FROM 选项上提供的数据缓冲区的长度 (作为全字二进制值)。 正确声明此值很重要,因为不正确的数据长度可能会导致消息接收方发生问题。
- HOSTCODEPAGE(数据值)
- 指定应用程序用于响应的实体主体的 CICS (主机) 代码页的 8 字符名称。
主机代码页名称的标准 CICS 格式由使用 3 编写的代码页号 (或更一般的 CCSID) 组成,必要时使用 5 十进制数字,然后使用尾部空格填充到 8 个字符。 对于少于 3 位数字的代码页 37,标准格式是 037。 现在, CICS 还接受范围在 1 到 65535 之间的最多 8 位 (以尾随空格填充) 的任何十进制数作为代码页名称,即使它不是标准格式也是如此。
当指定 HOSTCODEPAGE 选项时,将采用 SRVCONVERT ,因此将进行实体主体的代码页转换。 指定 SRVCONVERT 和/或 CHARACTERSET 以及省略 HOSTCODEPAGE 可让 CICS 标识主机代码页。
如果使用 CICS 文档来构成响应主体 (DOCTOKEN 选项) ,请勿指定 HOSTCODEPAGE 选项,因为 CICS 从 CICS 文档域的文档主机代码页记录中标识文档的主机代码页。
如果使用数据缓冲区来构成响应主体 (FROM 选项) ,那么可能需要指定 HOSTCODEPAGE。 如果此选项不存在,那么缺省值是本地 CICS 区域的缺省代码页,如 LOCALCCSID 系统初始化参数中所设置。 如果需要代码页转换,但应用程序已使用其他代码页,请使用 HOSTCODEPAGE 来指定该代码页。
如果省略所有代码页转换选项,那么不会进行代码页转换。
如果您正在使用 CONTAINER 选项,请不要指定 HOST CODEPAGE 选项。
- LENGTH(数据值)
- 仅出于升级目的支持此选项。 STATUSLEN 将其替换。
- MEDIATYPE(数据值)
- 指定提供的任何消息体的数据内容,例如
text/xml。 必须为 MEDIATYPE指定 56 字节区域。 介质类型最多包含 56 个字母数字字符,包括相应的标点符号,但不包括空格。 有关介质类型的更多信息,请参阅 IANA 介质类型和字符集。 CICS 会检查介质类型的格式是否正确,但不会针对数据内容检查介质类型的有效性。 CICS 未提供缺省值。 在某些情况下,您指定的介质类型会影响是否执行代码页转换; 有关更多信息,请参阅 SERVERCONV 选项的描述。 - SERVERCONV(cvda)
- 指定 CICS 在从应用程序使用的代码页发送之前,是否将命令发送的项的实体主体转换为适合收件人的字符集。 您可以在此命令上使用 CHARACTERSET 和 HOSTCODEPAGE 选项来指定所使用的字符集和代码页。 如果指定其中任一选项,那么将采用代码页转换 (SRVCONVERT)。 或者,您可以省略其中一个或两个选项,指定 SRVCONVERT 并让 CICS 确定合适的字符集和代码页。
- SRVCONVERT
- CICS 转换消息的实体主体。当您指定没有 CHARACTERSET 的 SRVCONVERT 时, CICS 将确定适合的字符集,如下所示:
- 如果 Web 客户机的请求具有用于命名 CICS支持的字符集的 Content-Type 头,那么将使用该字符集。
- 如果 Web 客户机的请求没有 Content-Type 头或指定的字符集不受支持,那么使用 ISO-8859-1 字符集。
- 对于HTTP 消息(使用USER协议发送),使用 ISO-8859-1 字符集。
- 如果使用了 FROM 选项,那么 CICS 会将主机代码页标识为本地 CICS 区域的缺省代码页,如 LOCALCCSID 系统初始化参数中所指定。
- 如果使用 DOCTOKEN 选项,那么 CICS 将从 CICS 文档域的文档主机代码页记录中标识文档的主机代码页。
- 如果使用“容器”选项,当 HTTP存储在容器中时, CICS 将主机代码页识别为用于数据编码的代码页。
如果仅指定 SRVCONVERT ,请注意,要进行代码页转换, MEDIATYPE 选项必须指定可根据 IANA 定义标识为文本的数据内容类型。 对于非文本介质类型, CICS 不会转换消息体,并且会发出 INVREQ RESP2 代码。 但是,为了与先前发行版中编码的 Web 感知应用程序兼容,如果指定 CHARACTERSET 或 HOST 选项或省略 SERVERCONV 选项,那么 MEDIATYPE 选项不会影响代码页转换。
BIT 容器包含非文本介质,因此不支持代码页转换。 因此,如果使用 BIT 容器对 SRVCONVERT 或 CHARACTERSET 选项进行编码,那么会产生 INVREQ RESP2 错误。
- NOSRVCONVERT
- CICS 不转换 HTTP实体主体,而是以应用程序使用的代码页发送到服务器。 如果指定 NOSRVCONVERT ,那么不能指定 CHARACTERSET 或 HOSTCODEPAGE 选项。
注: 如果省略所有代码页转换选项 (SERVERCONV , CLNTCODEPAGE , CHARACTERSET , HOSTCODEPAGE) ,那么不会进行代码页转换。 - STATUSCODE(数据值)
- 指定由应用程序确定的标准 HTTP 状态代码,该代码将插入 HTTP状态行中。 代码是半字二进制值。 示例为 200 (正常响应) 或 404 (未找到)。 如果未指定此选项, CICS 将默认提供200。
CICSHTTP参考中包含有关 CICS状态代码使用的信息。 对于状态代码 204、205 和 304,不允许使用消息体,如果您尝试包含消息体 CICS 会返回错误响应。 除此之外, CICS 不会检查您对状态代码的使用是否恰当。
- STATUSLEN(数据值)
- 指定 STATUSTEXT 选项上提供的字符串的长度 (作为全字二进制值)。
- STATUSTEXT(数据区)
- 指定包含人类可读文本的数据区,以描述状态码的原因。 该文本称为原因短语。 例如, "OK" (随附 200 状态码) 或 "Bad Request" (随附 400 状态码)。 HTTP/1.1 规范 (RFC 2616) 为每个状态码定义了建议的原因短语,但您不必使用这些原因短语。
条件
- 122 CHANNELERR
- RESP2 值有:
- 2
- 找不到 CHANNEL 选项指定的通道。
- 110 CONTAINERERR
- RESP2 值有:
- 2
- 找不到 CONTAINER 选项指定的容器。
- 16 INVREQ
- RESP2 值有:
- 1
- 该命令在非 CICS Web Support 应用程序中发出。
- 11
- 操作码无效。
- 13
- 关闭状态无效。
- 14
- 代码页组合无效。
- 32
- 介质类型无效。
- 41
- 连接已关闭。
- 46
- SERVERCONV 选项无效。
- 72
- 状态码不支持消息体。
- 75
- 发送序列无效。
- 77
- 区块不完整。
- 80
- 不能将 CHARACTERSET 与 NOSRVCONVERT 一起指定。
- 81
- 不能将 HOSTCODEPAGE 与 NOSRVCONVERT 一起指定。
- 来自 45 家供应商的 85 个工具
- 分块功能不能用于HTTP 消息。
- 86
- 分块不能与 HTTP/1.0 客户机配合使用。
- 87
- 不允许使用状态码。
- 88
- 不允许主机代码页。
- 89
- 先前通过此连接发送失败。 不允许进一步发送。
- 90
- STATUSCODE 和 STATUSTEXT 选项不允许用于第二个或后续块。
- 91%
- CHARACTERSET 和 CLNTCODEPAGE 选项不允许用于第二个或后续块。
- 92
- 第二个或后续块不允许 HOSTCODEPAGE 选项。
- 93
- 对于第二个或后续块,不允许使用 MEDIATYPE 选项。
- 94
- 第二个或后续块不允许 CLOSESTATUS 选项。
- 95
- 第二个或后续块不允许使用 SERVERCONV 选项。
- 120
- CHUNKING 选项无效。
- 121
- 需要 FROMLENGTH 选项。
- 122
- 需要 FROM 选项。
- 123
- 未指定消息体。 使用 FROM , DOCTOKEN 或 CHUNKEND。
- 124
- 未指定 CHUNKING 选项,需要 FROMLENGTH 选项。
- 125
- 指定了 CHUNKNO ,需要 FROM 选项。
- 126
- 指定了 CHUNKNO ,需要 FROMLENGTH 选项。
- 127
- 指定了 CHUNKYES ,需要 FROM 选项。
- 128
- 指定了 CHUNKYES ,需要 FROMLENGTH 选项。
- 129
- 不允许将 FROM 选项与 CHUNKEND 一起使用。
- 130
- 不允许 FROMLENGTH 选项与 CHUNKEND 一起使用。
- 131
- FROMLENGTH 选项指定为零。
- 143
- 指定的 DOCSTATUS 值无效。
- 145
- 未指定通道,并且没有当前通道。
- 147
- 内部转换错误。
- 148
- 容器不支持用户协议。
- 150
- 已请求转换,但要发送的数据位于 DATATYPE BIT 容器中。
- 151
- 在 Web 错误处理期间,分块无效。
- 152
- ACTION (最终) 在 WEB 错误处理期间无效。
- 17 IOERR
- RESP2 值有:
- 42
- 套接字错误。
- 22 LENGERR
- RESP2 值有:
- 50
- FROMLENGTH 选项值不大于零。
- 13 NOTFND
- RESP2 值有:
- 1
- 未创建或已删除文档,或者未正确指定名称。
- 7
- 找不到客户机代码页 (字符集)。
- 83
- 找不到主机代码页 (针对服务器)。
