CICS HTTP HTTP 请求和响应处理

对于作为 HTTP CICS® , CICS 是Web客户端,它与 HTTP通信。 用户编写的应用程序通过 CICS 向 HTTP发送请求,并接收来自服务器的响应。 CICS 与服务器保持持续连接。 在该应用程序发出的命令中使用会话令牌来识别连接。

发出 HTTP 请求并接收响应的应用程序必须使用 EXEC CICS WEB API 命令以明确地指示与服务器进行交互操作。 可以使用 Web 感知应用程序发出 HTTP 请求,然后处理结果以将信息提供给非 Web 感知应用程序。

启动 HTTP的应用程序应设计为能够处理 CICS 从服务器接收到的任何响应请求的信息,其中可能包括错误响应、重定向到另一个 URL、嵌入的超文本链接、HTML表单、图像源或其他请求应用程序执行操作的项目。 如有需要 CICS 可以对请求和响应进行代码页转换。

图 1 显示本主题中描述的过程。
图 1。 HTTP CICS
HTTP 处理。 下图后面的文本中描述了所使用的元素及其交互方式。
CICS 作为 HTTP的处理过程如下:
  1. 应用程序通过 CICS 启动与 HTTP连接。 应用程序通过发出 EXEC CICS WEB OPEN 命令来执行该操作。 可以引用您创建的 URIMAP 资源为连接指定方案和主机名,也可以由应用程序提供该信息。 (请参阅 URIMAP 资源定义 以获取有关 URIMAP 资源的更多信息。) 应用程序一次可以打开多个连接。
  2. CICS 建立与服务器的连接,或者检查是否存在合适的合用连接。 通过使用应用程序提供的信息, CICS 在套接字上打开 TCP/IP 连接并与服务器联系。 在该过程中,如果需要,可使用 XWBOPEN 用户出口(如果已使用 ENABLE PROGRAM 命令激活它)通过代理服务器重定向应用程序的请求,并将安全策略应用到主机的连接。 或者,如果应用程序使用了指定连接池 (SOCKETCLOSE 属性) 的 URIMAP 资源,那么 CICS 将检查池中是否有休眠连接可供复用。 当建立 TCP/IP 连接时,或者将现有连接提供给应用程序以供复用时, CICS 会向应用程序返回会话令牌以在其使用期间唯一地标识该连接。 该会话令牌将用于由应用程序发出的、与该连接有关的所有剩余命令。 有关会话令牌的更多信息,请参阅 会话令牌
  3. 应用程序可为它的请求编写 HTTP 头。 可使用 WEB WRITE HTTPHEADER 命令构建用户编写的 HTTP 头并存储以备发送。
  4. 应用程序指定请求行的组成部分。 使用 WEB SEND 或 WEB CONVERSE 命令指定请求方法、路径信息以及查询字符串。 请求HTTP由 CICS 提供。
  5. 应用程序可为它的请求生成实体主体。 在 WEB SEND 命令或 WEB CONVERSE 命令上指定请求的内容。 它可以由 CICS 文档 (使用 DOCUMENT 接口) 构成,也可以由缓冲区的内容构成。 如果服务器位于 HTTP/1.1,那么可以将分块的传输编码用于由缓冲区内容构成的请求主体 (但不能用于 CICS 文档)。
  6. 应用程序开始传输请求。 当应用程序发出 WEB SEND 或 WEB CONVERSE 命令时,会将请求传递到 CICS 以通过会话令牌指定的连接进行发送。
  7. CICS 生成一些必需的 HTTP 标头并将其添加到请求中,然后将请求发送到服务器。 某些报头的值CICS 直接生成(例如Date报头),其他报头的值则基于应用程序提供的信息(使用WEB SEND或WEB CONVERSE命令)或URIMAP资源。 在发送请求期间,如果需要,可以调用两个用户出口。 调用 XWBSNDO 以对个别请求应用安全策略,而 XWBAUTH 指定了基本认证必需的用户名和密码详细信息。
  8. 服务器接收并处理请求,并提供响应。 CICS 将响应传递到应用程序。
  9. 应用程序会检查响应。 可使用 WEB READ HTTPHEADER 命令或 HTTP 头浏览命令检查响应的头。 WEB RECEIVE 或 WEB CONVERSE 命令接收可由应用程序处理的响应的主体(如果有),以及响应的状态码和状态文本。
  10. 应用程序会启动更多的请求和响应。 如果服务器支持持续连接,那么通过会话令牌标识的连接会保持打开状态,以接收更多请求。 如果服务器不支持持续连接,那么服务器会指示 CICS 关闭连接。
  11. 应用程序完成使用连接。 当完成所有请求和响应时,应用程序发出 WEB CLOSE 命令以结束使用连接。 如果使用指定了连接池的 URIMAP 资源打开连接,那么服务器或应用程序都不会发出关闭连接的请求,CICS 不会关闭此连接。 相反,CICS 会检查连接状态是否正常,然后将其置于休止连接池中。 合用的连接可由另一应用程序或同一应用程序的另一实例重复使用,以连接到同一服务器上。 如果连接不适用于连接池,原因是其已关闭,或未使用 URIMAP 资源打开,或状态不正常,那么 CICS 会关闭此连接。

在此过程中,当消息进入和离开 CICS时,通常需要进行代码页转换,以便 CICS处理和用户编写的应用程序(通常使用EBCDIC编码)能够与 HTTP (通常使用ASCII编码)进行通信。 CICS代码页转换解释了何时以及如何进行转换。 可使用 WEB SEND、WEB RECEIVE 或 WEB CONVERSE 命令中的选项指定所需的代码页转换类型。 对于作为 HTTP CICS ,默认情况下,在发送和接收消息时,代码页转换确实会发生。