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

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