从作为 HTTP 服务器的 CICS 发送 HTTP 响应

使用 WEB SEND 命令使 CICS ® 组装 HTTP 响应的 HTTP 头,实体主体,状态码和原因短语,执行代码页转换,并将响应传输到 Web 客户机。

开始之前

在发出 WEB SEND 命令之前,使用 WEB WRITE HTTPHEADER 命令为响应编写任何其他 HTTP 头,如 为响应编写 HTTP 头 中所述。 还会生成消息所需的任何实体主体,如 为 HTTP 消息生成实体主体中所述。

在 WEB SEND 命令上指定状态码和原因短语。 状态码和原因短语 说明了这些内容。 CICS Web Support 的 HTTP 状态码参考 提供应用程序可能使用的状态码的概述。 要计划使用状态码并查找有关它们的更多信息,请查阅您正在使用的 HTTP 规范。 有关 HTTP 规范的更多信息,请参阅 HTTP 协议

关于此任务

需要的话,响应可以分块(分块的传输编码)发送。 您不能将由管道传送的响应发送回 Web 客户机;必须将单个响应发送至由 Web 客户机发送的每个请求。

请参阅 WEB SEND (服务器) 以获取参考信息。

关于该命令,请注意以下几点:

过程

  1. 根据情形,指定 STATUSCODE 选项为响应选择适当的状态码,并指定 STATUSTEXT 和 STATUSLEN 选项以提供原因短语。
    CICS 不会验证您选择的状态码,用户应用程序必须确保该值有效并且符合 HTTP 状态码的规则。
    根据您选择的状态码,在发出 WEB SEND 命令之前,您可能需要完成以下部分或所有步骤:
    1. 检查 Web 客户机请求的 HTTP 版本,以确保可理解状态码。
      HTTP/1.1 规范包含的状态码比 HTTP/1.0 规范的状态码多。
    2. 如果 HTTP 规范规定状态码必须伴有特定 HTTP 头,请使用 WRITE HTTPHEADER 命令以创建这些头。
    3. 如果 HTTP 规范规定状态码必须伴有提供特殊信息的消息体,请创建适当的实体主体。
      如果状态码指示错误或从客户机请求进一步操作,您通常需要特殊信息。
      不允许消息体具有状态码 204、205 和 304。 如果选择了不允许消息体的状态码,并且尝试使用消息体,那么 CICS 会向 WEB SEND 命令提供错误响应。
  2. 通过指定 DOCTOKEN 选项 (对于您已创建的 CICS 文档) 或 FROM 选项 (对于您已组装的数据主体) 来标识响应的任何实体主体的源。 如果使用 FROM 选项,那么指定 FROMLENGTH 选项给出实体主体或块(如果使用分块的传输编码)的长度。
    对于分块的传输编码,您不能使用 DOCTOKEN 选项。
  3. 使用 MEDIATYPE 选项指定响应主体的介质类型。
    CICS 不会针对数据内容检查规范的有效性。
    MEDIATYPE 没有缺省值。 如果未指定此属性,那么 CICS 不会为响应构建 Content-Type 头。
  4. 如果要立即发送消息,而不是在任务结束时发送(这是缺省值),那么为 ACTION 选项指定 IMMEDIATE。
    如果您正在使用分块的传输编码,那么 IMMEDIATE 是缺省值,因此不需要进行此选择。

    一个任务中只能发送一个响应。 它可以是使用一条 WEB SEND 命令的标准响应,或是使用 WEB SEND 命令序列的分块响应。

  5. 如果要在发送响应后关闭连接,那么为 CONNECTION 选项指定 CLOSE。
    CICS 在响应上写入 Connection: close 头,这将通知 Web 客户机连接已关闭,并且无法发送更多请求。 对于处于 HTTP/1.0 级别的 Web 客户机, CICS 通过省略 Connection: keep-Alive 头来实现相同的效果。
  6. 为消息体的代码页转换指定适当的设置。
    1. SERVERCONV 选项提供代码页转换的全部控制。 使用它指定是否进行代码页转换。
      对于作为 HTTP 服务器的 CICS ,为了与先前发行版中编码的 Web 感知应用程序兼容,如果指定了另一个代码页转换选项,但未指定 SERVERCONN ,那么将采用代码页转换。 如果您想要防止代码页转换,请指定 SERVERCONV(NOSRVCONVERT) 或省略所有代码页转换选项。
    2. 如果要进行代码页转换,但 CICS 选择的字符集不合适,请使用 CHARACTERSET 选项来指定替代项。
      缺省情况下, CICS 使用来自 Web 客户机的原始请求的 Content-Type 头中指定的字符集。 如果该字符集不受支持或未声明,那么 CICS 将改为使用 ISO-8859-1 字符集。

      Web 客户机可以在 Accept-Charset 头中指定备用的可接受字符集。 如果您希望指定其中一个字符集,那么您的应用程序必须分析头(可能包括指示 Web 客户机首选项的质量值),并选择适当的受支持字符集。

      CICS 不支持 IANA 指定的所有字符集。 HTML 编码字符集 列出了 CICS 支持用于代码页转换的 IANA 字符集。
    3. 如果要进行代码页转换,并且正在使用 FROM 选项来指定消息体,请使用 HOSTCODEPAGE 选项来标识应用程序的代码页,如果这 不是 LOCALCCSID 系统初始化参数中指定的本地 CICS 区域的缺省代码页。
      如果您正在使用 CICS 文档 (DOCTOKEN 选项) ,那么 CICS 会从 CICS 文档域的文档主机代码页记录中标识该文档的主机代码页。
    对于指定非文本介质类型的消息,不进行代码页转换,除非您不指定 SERVERCONV;在这种情况下,出于兼容目的,将不考虑介质类型。
    HTTP 头和状态行始终由 CICS 转换为 ISO-8859-1 字符集。
  7. 如果您正在使用分块的传输编码 (或分块) ,那么除了本主题中的基本指示信息外,请遵循 使用分块的传输编码发送 HTTP 请求或响应中的特殊指示信息。
    您必须确保正确遵循了该主题中描述的过程,以便接收方可接受分块消息。 分块的消息是使用具有特殊选项的 WEB SEND 命令的多个实例发送的。