接收 HTTP 请求的实体主体

应用程序可以发出 WEB RECEIVE 命令以接收 HTTP 请求的实体主体。 您只可以接收实体主体的第一部分,或使用一系列 WEB RECEIVE 命令,将整个主体分为多个较小的部分来接收。

关于此任务

WEB RECEIVE 命令不设置超时值。 只有当从Web客户端成功接收完整请求且该CICS® 保留时,才会调用用户应用程序。对于HTTP CICS ,TCPIPSERVICE定义中的端口SOCKETCLOSE属性决定了Web客户端完成发送请求所需的时间。 当此时间段结束时 CICS 将向网络客户端返回408(请求超时)响应。

如果请求消息是使用分块的传输编码发送的,那么 CICS 会在将块传递到应用程序之前将其组合到单个消息中。 如果发送了一系列由管道传送的请求,那么 CICS 会将每个请求视为单独的事务,并且在使下一个请求可供下一个用户应用程序处理之前需要来自用户应用程序的响应。

请参阅 WEB RECEIVE (Client) 以获取完整参考信息。 使用 WEB RECEIVE 命令执行以下操作:

过程

  1. 确定您是否需要接收该请求的实体主体。
    1. 对于某些请求方法(如 GET 方法),实体主体不适用,而且允许您的应用程序忽略存在的任何实体主体。
      CICSHTTP参考指出了适用方法。 如果存在不适用的实体主体,那么如果您需要,您可仍然接收它。
      查看 HTTP请求行 ,可以了解如何识别请求方法。
    2. 对于 HTTP/1.1 请求,实体主体的存在由请求上的非零 Content-Length 头(或者如果消息已分块,由 Transfer-Encoding 头)指示。
      如果 Content-Length 头的值为零,或者 Transfer-Encoding 头和 Content-Length 头都没有提供,那么不存在实体主体。
      检查消息HTTP可以了解如何读取消息HTTP。
    3. 没有规定 HTTP/1.0 请求必须指定 Content-Length 头,但是它们可能会进行指定。 请求上的非零 Content-Length 头用于指示是否存在实体主体。
      如果不存在 Content-Length 头,但是请求方法(尤其是 POST 方法)指示某个实体主体适用,那么可能存在实体主体。
  2. 通过指定 INTO 选项 (对于数据缓冲区) 或 SET 选项 (对于指针引用) 和 LENGTH 选项来接收实体主体。
    返回时,LENGTH 选项设置为所接收的数据的长度。
  3. 如果要限制从实体主体接收的数据量,那么指定 MAXLENGTH 选项。
    1. 如果要只接收第一部分实体主体,并丢弃超出此长度的任何数据,那么省略 NOTRUNCATE 选项。
      NOTRUNCATE 是缺省值。
    2. 如果要保留(而不是丢弃)超出该长度的任何数据,请指定 NOTRUNCATE 选项。
      您可以使用更多 WEB RECEIVE 命令获取任何剩余数据。
    如果已使用分块传输编码发送数据,那么 CICS 会在将块传递到应用程序之前将其组合到单个消息中,因此 MAXLENGTH 选项将应用于分块消息的实体主体的总长度,而不是应用于每个单独的块。 CICS 接受的单个消息的数据总量受 TCPIPSERVICE 定义的 MAXDATALEN 属性限制。
  4. 指定您要在此处设置的任何选项以执行代码页转换。
    1. SERVERCONV 选项提供代码页转换的全部控制。 使用它指定是否进行代码页转换。
      对于HTTP CICS ,为了与早期版本中编写的网络感知应用程序兼容,如果未指定SERVERCONV,但指定了其他代码页转换选项,则假定需要进行代码页转换。 如果您想要防止代码页转换,请指定 SERVERCONV(NOSRVCONVERT) 或省略所有代码页转换选项。

      如果您接收已打包或已压缩的实体主体,如消息的 Content-Encoding 头所指示的,那么确保禁止了代码页转换。 CICS 不会为您解码这些类型的消息,如果应用代码页转换,那么结果可能不可预测。 如果您无法解码经过压缩的实体主体,您可以通过返回 415 状态码来通知 Web 客户机。

    2. 如果要进行代码页转换,但 CICS 无法确定 Web 客户机的字符集,请使用 CHARACTERSET 选项进行指定。
      对于较早的 Web 客户机,请求头可能不提供该信息。 在这种情况下, CICS 将采用 ISO-8859-1 字符集,因此仅当假定不正确时才需要指定字符集。
    3. 如果要进行代码页转换,但本地 CICS 区域的缺省代码页 (如 LOCALCCSID 系统初始化参数中所指定) 不适合您的应用程序,请使用 HOSTCODEPAGE 选项来指定备用主机代码页。
    对于指定非文本介质类型的消息,不进行代码页转换,除非您不指定 SERVERCONV;在这种情况下,出于兼容目的,将不考虑介质类型。 请注意,出于兼容性目的,如果入站消息未指定介质类型,那么 CICS 会偏离缺省为 application/octet-stream 的 HTTP/1.1 要求。 CICS 改为使用 text/plain 作为缺省值,以便可以对消息执行代码页转换。
  5. 如果您指定了 MAXLENGTH 和 NOTRUNCATE 选项,并且有更多数据要接收,请发出更多 WEB RECEIVE 命令。
    使用 SET 选项但不带 MAXLENGTH 选项的一条 RECEIVE 命令接收所有剩余的数据,而不管它的长度有多长。 或者,您也可以使用一连串 RECEIVE 命令(带 NOTRUNCATE 选项)接收相应块中的剩余数据。
    持续发出 RECEIVE 命令,直至不再接收 LENGERR 响应。
    如果接收到的长度小于 MAXLENGTH 选项上请求的长度,那么可能不会指示数据结束; 如果 CICS 必须避免在数据结束时返回部分字符,那么可能会发生此情况。