WEB RECEIVE(服务器)
接收 HTTP 请求或非 HTTP 消息。
语法
条件: CHANNELERR , CONTAINERERR , INVREQ , ENGERR 和 NOTFND
此命令是线程安全的。
NOHANDLE、RESP 和 RESP2是常用选项,可添加到所有 EXEC CICS
命令中以处理错误条件。 命令语法图和选项说明中没有明确包含这些选项。 有关这些常用选项和 EXEC CICS
命令语法的信息,请参阅 EXEC CICS 命令格式和编程注意事项.
描述
- Web客户端HTTP向 CICS® 发出的 HTTP的正文。 有关正确使用WEB RECEIVE命令的指南,请参阅接收 HTTP实体主体。
- CICS Web支持工具处理的HTTP 消息,使用TCPIPSERVICE定义中的用户定义(USER)协议。 有关HTTP 消息的指南,请参阅 CICS Web支持和HTTP 请求。
- 来自另一个应用程序的请求,该应用程序使用 CICS 业务逻辑接口直接联系应用程序,而不是通过 CICS HTTP 侦听器。 有关 CICS 业务逻辑接口的指导,请参阅使用 CICS 业务逻辑接口进行开发。
将以其转义形式返回数据。
当将 HTTP接收至应用程序缓冲区(使用INTO或SET选项)时, WEB RECEIVE 允许您指定 CICS接收的传入数据所使用的代码页转换类型。 如果省略所有代码页转换选项 (SERVERCONV , CLNTCODEPAGE , CHARACTERSET , HOSTCODEPAGE) ,那么不会进行代码页转换。
- 如果介质类型是文本介质类型,那么将创建 CHAR 容器。
- 如果介质类型是非文本介质类型,那么将创建 BIT 容器。
- 如果 HTTP不包含媒体类型信息,则默认使用文本媒体类型。
如果创建了CHAR容器,则从 HTTP Content-Type标头字符集中检索数据当前代码页的编码字符集标识符(CCSID)的IANA注册名称。 如果 CICS 不提供或不支持此信息,则默认使用 ISO-8859-1。
可以使用 CHARACTERSET 选项覆盖字符集。 如果指定了 CHARACTERSET ,那么将创建 CHAR 容器。
当将 HTTP接收至命名容器时,不允许使用选项LENGTH、MAXLENGTH、NOTRUNCATE、SERVERCONV和HOSTCODEPAGE。
容器不能用于接收通过用户协议套接字发送的消息。
如果 HTTP包含Content-Length标头或作为分块请求发送, CICS 会将HTTP的正文接收至64位(高于标准)存储区。 当 CICS 需要为服务器应用程序提供31位版本时,才会将主体复制到31位(高于行)存储中。
选项
- BODYCHARSET(数据区)
- 指定 HTTP 请求主体的字符集。
- CHARACTERSET(数据值)
- 指定 Web 客户机用于所接收项的实体主体的字符集。 字符集的名称最多可包含 40 个字母数字字符,包括相应的标点符号。 CICS 不支持 IANA 指定的所有字符集。 HTML 编码字符集 列出了 CICS 支持用于代码页转换的 IANA 字符集。
如果 HTTP存储在缓冲区中,并且指定了CHARACTERSET选项,则默认使用SRVCONVERT选项,从而对实体正文进行代码页转换。 当您指定SRVCONVERT或HOSTCODEPAGE,或同时指定这两个选项(不指定CHARACTERSET)时, CICS 可以在将数据接收至缓冲区(使用INTO或SET选项)时识别消息正文的字符集。 SERVERCONV 选项的描述告诉您在这种情况下会发生什么。
如果 HTTP正文存储在容器中,并且指定了 CHARACTERSET 选项,则 CICS 会假定存储在容器中的数据是用该代码页编码的。 CHARACTERSET 覆盖接收数据的 CONTENT-TYPE 字符集,并将容器的 CCSID 设置为指定的 CHARACTERSET。 这意味着当对该容器发出 GET CONTAINER 命令时,数据将从 WEB RECEIVE 命令上的 CHARACTERSET 参数设置的 CCSID 转换为用户请求的任何代码页。
- CLNTCODEPAGE(数据值)
- 仅出于升级目的支持此选项。 CHARACTERSET 替换了它。 对于这两个关键字, CICS 执行的操作相同。
- HOSTCODEPAGE(数据值)
- 指定应用程序所使用的 CICS (主机) 代码页的 8 字符名称,应将接收到的项的实体主体转换为从 Web 客户机接收该项的字符集。
主机代码页名称的标准 CICS 格式由使用 3 编写的代码页号 (或更一般的 CCSID) 组成,必要时使用 5 十进制数字,然后使用尾部空格填充到 8 个字符。 对于少于 3 位数字的代码页 37,标准格式是 037。 CICS 还接受范围为 1 到 65535 的最多 8 位 (以尾随空格填充) 的任何十进制数作为代码页名称,即使它不是标准格式也是如此。
如果要将数据接收到缓冲区中 (并且指定了 INTO 或 SET 选项) ,那么将指定 HOSTCODEPAGE 选项并假定为 SRVCONVERT ,因此将进行实体主体的代码页转换。 指定 SRVCONVERT 和/或 CHARACTERSET 以及省略 HOSTCODEPAGE ,可让 CICS 确定主机代码页。
如果未指定此选项,那么缺省值是本地 CICS 区域的缺省代码页,如 LOCALCCSID 系统初始化参数中所指定。
如果您正在使用 TOCONTAINER 选项,请不要指定 HOST CODEPAGE 选项。
- INTO(数据区)
- 指定要包含正在接收的数据的缓冲区。 如果 HTTP包含一个Content-Length标头或分块发送, CICS 会将 HTTP保存在内部64位存储中;否则, CICS 会将正文保存在内部31位存储中。 将主体从此内部存储器复制到 INTO 选项中指定的应用程序缓冲区。
如果指定了 INTO 选项,那么还必须指定值大于零的 MAXLENGTH (否则将向应用程序返回带有 RESP2 16 的 INVREQ 错误)。
- LENGTH(数据区)
- 指定设置为 CICS 返回到应用程序的数据量的全字二进制变量。 请注意,这可能略小于您使用 MAXLENGTH 选项设置的限制,尤其是在涉及双字节或多字节字符集时,因为 CICS 不会在数据末尾返回部分字符。
- 如果未指定 NOTRUNCATE 选项 ,那么现在已废弃消息中存在的任何其他数据。 如果存在更多数据,那么将返回 RESP2 值为 57 的 LENGERR 响应。
- 如果指定了 NOTRUNCATE 选项 ,那么将保留任何其他数据。 如果有其他可用数据,那么将返回 RESP2 值为 36 的 LENGERR 响应。 NOTRUNCATE 选项的描述告诉您在这种情况下要执行的操作。
如果您使用应用程序缓冲区来存储 HTTP ,在使用INTO或SET选项时,必须指定LENGTH选项。 如果您使用命名容器来存储 HTTP (因此指定了 TOCONTAINER 选项),请不要使用 LENGTH 选项。
- MAXLENGTH(数据值)
- 指定 CICS 要传递给应用程序的最大数据量 (作为全字二进制值)。 MAXLENGTH 选项适用于是否指定了 INTO 或 SET 选项来接收数据。 如果数据是使用分块的传输编码发送的,那么 CICS 在将块传递到应用程序之前会将其组合到单个消息中,因此 MAXLENGTH 选项适用于分块的消息的总长度,而不是每个单独的块。 在进行任何代码页转换后测量数据。 如果数据长度超过指定的值并且 未 指定 NOTRUNCATE 选项,那么数据将截断为该值,并且将废弃其余数据。 如果数据长度超过指定的值并且指定了 NOTRUNCATE 选项 是 ,那么 CICS 将保留其余数据并可以使用它来满足后续 RECEIVE 命令。
如果您正在使用 TOCONTAINER 选项,请不要指定 MAXLENGTH 选项。
- MEDIATYPE (数据区)
- 指定提供的任何消息体的数据内容,例如
text/xml
。 必须为 MEDIATYPE指定 56 字节区域。 介质类型最多包含 56 个字母数字字符,包括相应的标点符号。 - NOTRUNCATE
- 指定当可用数据超过 MAXLENGTH 选项上请求的长度时,不会立即废弃其余数据,而是保留这些数据以供后续 RECEIVE 命令检索。 (如果未发出进一步的 RECEIVE 命令,那么在事务终止期间将废弃数据。)
使用 SET 选项且不使用 MAXLENGTH 选项的单个 RECEIVE 命令接收所有剩余数据,无论其长度如何。 或者,您也可以使用一连串 RECEIVE 命令(带 NOTRUNCATE 选项)接收相应块中的剩余数据。 继续发出 RECEIVE 命令,直到不再获得 LENGERR response.If 接收到的长度小于 MAXLENGTH 选项上请求的长度,那么这不一定表示数据结束; 如果 CICS 需要避免在数据结束时返回部分字符,那么可能会发生此情况。
如果您正在使用 TOCONTAINER 选项,请不要指定 NOTRUNCATE 选项。 第一个 WEB RECEIVE 命令会将整个 HTTP 正文存储在指定的容器中。
- SERVERCONV(cvda)
- 指定 CICS 是否将接收到的项的实体主体从 Web 客户机使用的字符集转换为适合应用程序的代码页。 您可以在此命令上使用 CHARACTERSET 和 HOSTCODEPAGE 选项来指定所使用的字符集和代码页。 如果指定其中任一选项,那么将采用代码页转换 (SRVCONVERT)。 或者,您可以省略其中一个或两个选项,指定 SRVCONVERT 并让 CICS 确定合适的字符集和代码页。
如果您正在使用 TOCONTAINER 选项,请不要指定 SERVERCONV 选项。
- SRVCONVERT
- CICS 在将消息的实体主体传递到应用程序之前对其进行转换。当指定没有 CHARACTERSET 的 SRVCONVERT 时, CICS 按如下所示标识字符集:
- 如果 Web 客户机的请求具有用于命名 CICS支持的字符集的 Content-Type 头,那么将使用该字符集。
- 如果 Web 客户机的请求没有 Content-Type 头或指定的字符集不受支持,那么使用 ISO-8859-1 字符集。
- 对于HTTP 消息(使用USER协议发送),使用 ISO-8859-1 字符集。
如果仅指定 SRVCONVERT ,请注意,要进行代码页转换,消息的介质类型必须根据 IANA 定义指定可标识为文本的数据内容类型。 对于未提供介质类型但指定了 SRVCONVERT 的消息,也会进行代码页转换。 如果存在非文本介质类型,那么 CICS 不会转换消息体。 但是,为了与先前发行版中编码的 Web 感知应用程序兼容,如果指定 CHARACTERSET 或 HOST 选项或省略 SERVERCONV 选项,那么消息的介质类型不会影响代码页转换。
- NOSRVCONVERT
- CICS 不会转换项的实体主体,它将以 Web 客户机使用的字符集传递到应用程序。 如果指定 NOSRVCONVERT ,那么不能指定 CHARACTERSET 或 HOSTCODEPAGE 选项。
- SET(ptr-ref)
- 指定要设置为所接收数据的地址的指针引用。 在下一个接收命令或任务结束之前,指针引用有效。
如果 HTTP包含一个Content-Length标头或已分块发送, CICS 会将 HTTP保存在内部64位存储中;否则, CICS 会将主体保存在内部31位存储中。 将主体从该内部存储器复制到应用程序可访问的存储器中,并将指针引用设置为此副本。
- TOCHANNEL(数据值)
- 指定容器所属的通道的名称。 通道的名称最多可包含 16 个字母数字字符,包括相应的标点符号。 The acceptable characters are A-Z a-z 0-9 $ @ # / % & ? ! : | " = , ; < > . - and _. Leading and embedded blanks are not permitted. 如果名称少于 16 个字符,那么将使用尾部空格来填充该名称。 如果通道不存在,那么将创建该通道。 此新通道将保留在作用域中,直到链接级别发生更改为止。 有关通道作用域的更多信息,请参阅 通道作用域。
If you plan to ship your channels between CICS regions, bear in mind that you should restrict your characters to standard alphanumeric characters (A-Z 0-9 & : = , ; <>. - _) to ensure they are represented in the same way by all EBCDIC code pages.
可以指定通道名称 DFHTRANSACTION 以使用事务通道。 当链路级别发生更改时,事务通道不会超出作用域: 在事务中始终可访问该通道。 有关更多信息,请参阅 通道和容器。
如果未指定 TOCHANNEL 选项,那么 CICS 将采用当前通道。
- TOCONTAINER(数据值)
- 指定放置数据的容器的名称。 容器的名称最多可以包含 16 个字母数字字符,包括相应的标点符号。 The acceptable characters are A-Z a-z 0-9 $ @ # / % & ? ! : | " = , ; < > . - and _. Leading and embedded blanks are not permitted. 如果名称少于 16 个字符,那么将使用尾部空格填充该名称。
If you plan to ship your containers between CICS regions, bear in mind that you should restrict your characters to standard alphanumeric characters (A-Z 0-9 & : = , ; <>. - _) to ensure they are represented in the same way by all EBCDIC code pages.
请勿使用以 "DFH" 开头的容器名称,除非 CICS请求这样做。
只能在第一个 WEB RECEIVE 命令上指定 TOCONTAINER 选项。
当指定了 TOCONTAINER 时 CICS 将把接收到的 HTTP保存在 64 位存储中,直到应用程序使用 CONTAINER API 命令获取 HTTP。
- 类型(cvda)
- 返回接收到的请求的类型。 CVDA 值包括:
- HTTP 是
- 表示HTTP 请求。
- HTTP 否
- 表示HTTP 请求。
HTTP 请求和HTTP 请求使用不同的协议,这些协议在TCPIPSERVICE定义中指定,因此必须使用不同的端口。 HTTP 请求使用用户定义(USER)协议。 如果您指定了同一个用户编写的应用程序来响应 HTTP 和HTTP ,则可以使用TYPE选项来区分请求类型。
条件
- 122 CHANNELERR
- RESP2 值有:
- 1
- TOCHANNEL 选项指定的名称包含非法字符或字符组合。
- 110 CONTAINERERR
- RESP2 值有:
- 1
- TOCONTAINER 选项指定的名称包含非法字符或字符组合。
- 16 INVREQ
- RESP2 值有:
- 1
- 该命令在非 CICS Web Support 应用程序中发出。
- 14
- 代码页组合无效。
- 46
- SERVERCONV 选项无效。
- 80
- 不能将 CHARACTERSET 与 NOSRVCONVERT 一起指定。
- 81
- 不能将 HOSTCODEPAGE 与 NOSRVCONVERT 一起指定。
- 84
- 身体不完整。
- 145
- 未指定通道,并且没有当前通道。
- 146
- 指定的容器是只读容器。
- 147
- 内部转换错误。
- 148
- 容器不支持用户协议。
- 149
- 只能在第一个 WEB RECEIVE 命令上指定 TOCONTAINER 选项。
- 22 LENGERR
- RESP2 值有:
- 16
- MAXLENGTH 选项值小于或等于零。
- 36
- 返回了部分响应主体。 使用其他 RECEIVE 来获取剩余部分。
- 57
- 响应主体超过指定的长度,该主体的其余部分已被废弃。
- 13 NOTFND
- RESP2 值有:
- 7
- 找不到代码页。
- 82
- 找不到客户机代码页 (字符集)。
- 83
- 找不到主机代码页 (针对服务器)。