CICS Web Support 的 HTTP 状态码参考
HTTP 状态码由服务器提供给客户机以说明客户机请求的结果。 当 CICS HTTP时,根据具体情况, CICS或用户应用程序将为每个响应选择适当的状态代码。 当 CICS 是 HTTP 客户机时,从服务器接收的大多数状态码传递到用户应用程序以供处理。
状态代码和原因短语解释了状态代码在 HTTP 响应中的使用方式。
要获取有关状态码的含义和正确使用的完整信息,应该查询您正在遵从的 HTTP 规范。 HTTP包含HTTP更多信息。
本主题提供与 CICS Web Support 相关的 HTTP/1.1 状态码的简要摘要。 当选择要通过 Web 错误程序或直接从用户应用程序发送的状态码时,检查您所遵从的 HTTP 规范是很重要的。 HTTP 规范提供有关应如何使用状态码的详细指导和要求(如,响应主体的内容应该是什么以及应包括什么 HTTP 头)。
CICS 发送响应的状态代码(当 CICS 是 HTTP时)
- CICS Web Support 在以下情况下生成对 Web 客户机的响应:
- 当 CICS Web Support 在初始处理来自 Web 客户机的请求时检测到问题; 例如,如果请求中缺少必需的信息,或者如果请求发送速度太慢并且达到接收超时,那么将执行此操作。
- 当已安装的 URIMAP 定义与请求匹配,但禁用 URIMAP 定义或虚拟主机,或者,无法读取静态响应的资源时。
- 当匹配的 URIMAP 定义将请求引用到 ATOMSERVICE 资源定义,但 ATOMSERVICE 定义已禁用,或者无法读取 Atom 订阅源的 CICS 资源时。
- URIMAP 匹配失败,为 TCPIPSERVICE 定义指定的分析器无法处理请求,并将控制权传递给 Web 错误程序时。
- URIMAP 定义和分析器程序以及转换器程序都无法确定应执行什么应用程序来服务请求。
- 分析器程序、转换器程序或用户编写的应用程序中发生异常终止。 这会确保即使在处理失败时也会将响应返回给 Web 客户机。
- 当 URIMAP 指定重定向响应时。
- 当 Web 客户机无权访问提供响应时所需的资源时。
- 对于状态码为 4xx 和 5xx 的 CICS 所生成的响应,通过定制用户可替换 Web 错误程序 DFHWBEP 和 DFHWBERX,可以修改发送给 Web 客户机的响应。 如果 CICS 生成的响应涉及 1xx、2xx 和 3xx 状态码,那么不能修改。 Web 错误程序可以更改响应的状态码、原因短语、HTTP 头和消息体。 当修改 Web 错误程序时,确保按照您所遵从的 HTTP 规范中的要求选择状态码和响应内容。 Web 错误程序 说明如何定制 Web 错误程序。
- 对客户机的请求作出响应的用户应用程序需要为响应选择合适的状态码。 状态码可将以下消息传送到 Web 客户机:
- 请求已按照预期的完成。
- 存在阻止请求实现的错误。
- 客户需要采取其他措施才能成功完成请求。 这包括遵循重定向 URL,或修正请求以使它可被服务器接受。
CICS (当 CICS 是 HTTP时)收到的响应的状态代码
- 当 CICS 是 HTTP时, CICS会将大多数状态代码的响应直接传递给用户应用程序进行处理。 少数状态代码由 CICS 处理,不会返回给应用程序。 如果状态代码传递给应用程序,则表明 CICS 没有对代码采取任何操作,应用程序有责任检查代码并采取适当措施。
- 您应适当地设计您的用户应用程序,当它接收带有表明错误的状态码的消息时,能作出合适的反应。 特别地,在以下情况下您应总是检查状态码:
- 如果您打算现在或者在将来连接时向服务器发送相同的请求。
- 如果您打算使用该连接向服务器发送更多请求。
- 如果您的应用程序正在执行任何进一步的处理,而该处理取决于响应中接收的信息。
CICS 作为 HTTP : CICS 向网络客户端提供的状态代码
表 1 显示了在 CICS 提供对 Web 客户机请求的响应的情境中使用的状态码。 可以通过修改 Web 错误程序来定制其中某些响应。 用户应用程序还可使用此处列出的许多状态码。
某些状态码仅适用于 HTTP/1.1 客户机。 CICS 不会将这些状态码返回到 HTTP/1.0 客户机。
| 状态码和原因短语 | 发送到 HTTP/1.0 客户机了吗? | 提供此响应时 | 可以在 Web 错误程序中修改吗? |
|---|---|---|---|
| 100 继续 | False | Web 客户机已发送 Expect 头。 | False |
| 200 正常 | 是 | 正常响应的传递 | False |
| 201 已创建 | 是 | 新对象已创建。 | False |
| 301 已永久移开 | 是 | URIMAP 定义指定重定向,具有属性 REDIRECTTYPE (PERMANENT)。 | False |
| 302 已找到 | 是 | URIMAP 定义指定重定向,具有属性 REDIRECTTYPE (TEMPORARY)。 | False |
| 304 未修改 | 是 | If-Modified-since 头是在请求时使用的,并且 CICS 能够验证是否未修改静态响应。 | 是 |
| 400 错误请求(某些情况下:无效请求) | 是 | 请求中的语法错误(如:错误地指定请求行,请求未完成或 Atom POST 或 PUT 请求的 Atom 条目有问题)。 或者,未提供 Host 头(仅 HTTP/1.1)。 或者,收到不带 If-Match 头的 PUT 请求。 对于想要更新对象而又不知道当前实体标记的客户机,应该指定“If-Match: *”。 | 是 |
| 401 基本认证错误 | 是 | 基本认证需要用户标识和密码。 这由端口的 TCPIPSERVICE 定义的安全设置确定。 | 是 |
| 403 已禁止(某些情况:客户机认证错误) | 是 | 基本认证未成功。 或者,客户机证书有问题。 或者,用户无权访问提供响应所需的资源,例如 ATOMSERVICE 资源定义,别名事务,程序使用的 CICS 命令或包含响应数据的 CICS 资源。 | 是 |
| 404 未找到(某些情况:未找到程序,未找到文件) | 是 | 未找到指定对请求作出响应的程序。 或者,未找到提供响应时所需的资源。 或者,在用于为 Atom 订阅源提供数据的 CICS 资源中找不到记录。或者,找不到图像文件。 | 是 |
| 408 请求超时 | False | 已超过请求的接收超时。 这由端口的 TCPIPSERVICE 定义中的 SOCKETCLOSE 属性确定。 | 是 |
| 409 冲突(某些情况下:资源重复) | 是 | 某个现有对象已在使用该指定的 URL,所以不会创建新对象。 | False |
| 412 预备条件失败 | 是 | 请求中已使用 If-Unmodified-Since 头。 或者,If-Match 头上的实体标记值与正在更新的对象的实体标志不匹配。 | 是 |
| 417 未达到期望的 | False | 接收到没有值“100-continue”的 Expect 头。 | False |
| 500 内部服务器错误(某些情况下:资源错误) | 是 | 涉及处理请求和提供响应的某个程序中的异常终止。 或者读取 z/OS UNIX 文件以获取静态响应时发生错误。或者涉及 Atom 订阅源的资源时发生错误,例如从资源记录生成 XML 标记以用作 Atom 条目内容时发生错误。 | 是 |
| 501 方法未实现 | 是 | CICS 不支持此 HTTP的方法。 (包括受支持但不是关于客户机请求方面的方法,如引用特定资源的 OPTIONS 请求。) 或者,请求的介质类型是“multipart/byteranges”,它不受支持。 或者,请求的转换编码不同于“分块的”。 (注:连接由 CICS 关闭。) | 是 |
| 503 服务不可用 | 是 | 存在匹配 URIMAP 定义,但禁用它,或禁用它为其中一部分的虚拟主机。 或者,匹配的 URIMAP 定义引用了被禁用的 ATOMSERVICE 资源定义。或者,禁用 URIMAP 定义或 ATOMSERVICE 定义中为提供响应数据而指定的资源。 | 是 |
| 505 版本不受支持 | False | HTTP 版本高于 1.1 , CICS支持的最高版本方法无法识别。 | 是 |
CICS 作为 HTTP :用户应用程序中的状态代码
表 2 显示每个状态码,描述其与用户应用程序的相关性,并根据 HTTP/1.1 规范中的建议建议建议相应的操作。
请记住, CICS 不会执行这些状态码可能隐含的任何特定操作,并且 CICS 通常不会根据消息内容检查其有效性。 您应该确保状态码正确并且您已采取任何必要的操作。 确保检查所遵从的 HTTP 规范以获取更多信息和适用 于每个状态码的要求。
| 状态码和通常的原因短语 | 适用于 HTTP/1.0 客户机吗? | 当您可能提供此响应时 | 对消息体和 HTTP 头的影响(状态码适用于用户应用程序的情况)。 请参阅 HTTP 规范以获取更多信息。 |
|---|---|---|---|
| 100 继续 | False | 不要使用。 CICS 处理 Expect 请求并发送 100-Continue 响应本身。 | |
| 101 转换协议 | False | 不要使用。 CICS 不支持 HTTP或安全协议的升级。 | |
| 200 正常 | 是 | 您已完成请求。 正常的响应。 | 提供正常响应体。 |
| 201 已创建 | 是 | 您已创建新的资源。 (如果还未创建资源则使用 202 已接受)。 | 需要消息体内容和一个或多个头。 |
| 202 已接受 | 是 | 您已接受请求但还未处理它,并且不保证要处理它。 | 需要消息体内容。 |
| 203 非权威信息 | False | 不要使用。 您提供的头将给出权威信息。 | |
| 204 无内容 | 是 | 您未发送消息体,也许因为您只需发送已更新的头。 | 不允许消息体。 |
| 205 重置内容 | False | 您希望客户机清除发出请求的表单。 | 不允许消息体。 |
| 206 部分内容 | False | 您支持字节范围请求,并且该响应满足了请求。 | 正常响应体。 需要一个或多个头。 |
| 300 多个选项 | 是 | 您能提供资源的多个版本(例如,不同语言的文档)。 | 需要消息体内容和一个或多个头。 |
| 301 已永久移开 | 是 | 建议不要由用户应用程序发出。 可以使用 URIMAP 定义中的 LOCATION 和 REDIRECTTYPE 属性来管理重定向,以便 CICS 在不调用应用程序的情况下生成正确的响应。 REDIRECTTYPE (PERMANENT) 选择该状态码。 | |
| 302 已找到 | 是 | 建议不要由用户应用程序发出。 当将 URIMAP 定义用于重定向时,REDIRECTTYPE (TEMPORARY) 选择该状态码。 | |
| 303 参阅其他内容 | False | 您希望客户机为另一个给出响应(特别是有关 POST 请求的结果的响应)的资源发出 GET 请求。 | 需要消息体内容和一个或多个头。 |
| 304 未修改 | 是 | 客户机发出有条件的请求并且您提供的资源未更改。 注意,由应用程序动态构建的响应可能要在每个请求上修改。 对于不更改的资源,考虑使用 URIMAP 定义传递静态响应。 | 不允许消息体。 (您可以使用 DOCTOKEN 选项指定不含内容的文档。) 需要一个或多个头。 |
| 305 使用代理 | False | 您希望客户机通过命名代理来发出它的请求。 | 需要一个或多个头。 |
| 307 临时重定向 | False | 建议不要由用户应用程序发出。 CICS 将 302 状态码 (而不是此状态码) 用于 URIMAP 重定向。 | |
| 400 错误请求 | 是 | 客户机的请求包含语法错误或类似的问题,并且您无法处理它。 | 需要消息体内容。 |
| 401 未授权 | 是 | 不要使用。 如果在 TCPIPSERVICE 定义的安全设置中指定了基本认证过程,那么 CICS 将处理该过程。 | |
| 403 禁止 | 是 | 您拒绝客户机的请求。 | 需要消息体内容。 |
| 404 未找到 | 是 | 您没有响应该请求的资源; 或者,您要拒绝请求而没有说明;或者,没有其他相关的状态码。 | 需要消息体内容。 |
| 405 不允许的方法 | False | 客户机使用了该资源不支持的方法。 | 需要消息体内容和一个或多个头。 |
| 406 不可接受 | False | 客户机使用 Accept 头发出了有条件的请求,但您没有满足它们的标准的资源版本。 注意,作为使用该状态码的替换方法,您可发送不满足条件的响应。 | 需要消息体内容。 |
| 407 需要代理认证 | False | 不要使用。 CICS 不充当代理服务器。 | |
| 408 请求超时 | False | 建议不要由用户应用程序发出。 应该使用 TCPIPSERVICE 定义上的 SOCKETCLOSE 属性为 CICS Web Support 处理指定超时。 | |
| 409 冲突 | False | 已更改资源并且无法将客户机的请求应用到资源,因为它现在处于停止状态。 | 需要消息体内容。 |
| 410 不可用 | False | 资源永久地不可用。 | 需要消息体内容。 |
| 411 需要长度 | False | 不要使用。 CICS 需要 HTTP/1.1 请求为成功套接字接收指定 Content-Length 头。 | |
| 412 预备条件失败 | False | 客户机发出了有条件的请求且条件未满足。 | 需要消息体内容。 |
| 413 请求实体太大 | False | 建议不要由用户应用程序发出。 应该指定请求大小限制,以供 CICS Web Support 使用 TCPIPSERVICE 定义上的 MAXDATALEN 属性进行处理。 | |
| 414 请求 URI 太长 | False | 客户机的请求 URL 太长而使应用程序无法处理。 | 需要消息体内容。 |
| 415 不支持的介质类型 | False | 客户机发送的消息体具有您不支持的介质类型或内容编码。 | 需要消息体内容。 |
| 416 无法满足请求的范围 | False | 客户机使用 Range 头字段(而不是 If-Range 头字段)发出请求,并且尽管您支持字节范围,该范围也不出现在资源中。 | 需要消息体内容和一个或多个头。 |
| 417 未达到期望的 | False | 不要使用。 CICS 处理 Expect 请求。 | |
| 500 内部服务器错误 | 是 | 由于应用程序或系统错误,您无法处理请求。 | 需要消息体内容。 |
| 501 未实施 | 是 | 不支持客户机的请求的方法。 在客户机为 HTTP/1.0 或您在使用 USER 协议的情况下才应发出该状态码。 对于 HTTP ,在初始处理期间, CICS 会拒绝任何使用无法识别的方法的请求。 如果方法被识别但不适用于这些资源,那么“405 不允许的方法”应该用于 HTTP/1.1 客户机。 | 需要消息体内容。 |
| 502 错误网关 | 是 | 不要使用。 CICS 不充当代理或网关。 | |
| 503 服务不可用 | 是 | 除非用户应用程序需要访问另一个临时不可用的应用程序或系统,否则它可能与使用该状态码的情况无关。 | 需要消息体内容和一个或多个头。 |
| 504 网关超时 | False | 不要使用。 CICS 不充当代理或网关。 | |
| 505 不支持的 HTTP 版本 | False | 不要使用。 CICS 将 HTTP响应与 HTTP客户端请求进行匹配。 |
CICS 作为 HTTP :处理服务器响应中收到的状态代码
表 3 显示了您可能在来自服务器的响应上接收到的状态码,并根据 HTTP/1.1 规范中的建议来建议相应的操作。 WEB RECEIVE 命令返回状态码和状态文本。 记住,服务器可能已更改 HTTP 规范中建议的原因短语的文本。
确保检查所遵从的 HTTP 规范以获取更多信息和适用 于每个状态码的要求。
| 状态码和可能的原因短语 | 服务器为何要发送该状态码? | 建议的用户应用程序操作 |
|---|---|---|
| 100 继续 | 在 WEB SEND 命令中使用了 ACTION(EXPECT) 选项,并且服务器接受全部消息发送。 | CICS 通过发送消息体来处理此响应。 用户应用程序将不接收该状态码。 |
| 101 转换协议 | 不应使用。 CICS Web Support 不支持协议升级。 | 用户应用程序不应接收该状态码。 |
| 200 正常 | 请求成功。 正常的响应。 | 按计划继续处理响应。 |
| 201 已创建 | 您已请求创建资源并且已完成创建。 | 按计划继续处理响应。 |
| 202 已接受 | 服务器接受您的请求但还未执行处理。 | 按计划继续处理响应,但注意,不一定已提交您所作的任何更改,并且可能从不提交。 |
| 203 非权威信息 | 与消息体相关的头与服务器上的头不完全匹配。 | 按计划继续处理响应。 |
| 204 无内容 | 没有响应的消息体。 | 按计划继续处理响应,但注意,没有要接收的主体。 |
| 205 重置内容 | 服务器希望您清除导致发送请求的表单。 | 清除任何您用于发出请求的表单字段。 |
| 206 部分内容 | 您使用 Range 头字段发出请求并且它已成功。 | 按计划继续处理响应。 |
| 300 多个选项 | 资源的不同版本可用。 | 从提供的信息中选择您首选的版本,并发出新的请求。 可能有 Location 头,它包含服务器的首选项的 URL。 |
| 301 已永久移开 | 已将资源永久移动到新的位置。 | 对服务器提供的 URL 发出新请求(可能在 Location 头中),并将该 URL 用于将来所有的请求。 |
| 302 已找到 | 已将资源临时移动到新的位置。 | 对服务器提供的 URL 发出新请求(可能在 Location 头中),但不将该 URL 用于将来的请求。 |
| 303 参阅其他内容 | 服务器希望您为另一个给出响应(特别是有关 POST 请求的结果的响应)的资源发出 GET 请求。 | 使用 GET 方法对服务器提供的 URL(可能在 Location 头中)发出新请求。 |
| 304 未修改 | 您发出了有条件的请求并且资源未更改。 | 请参阅响应的现有存储版本以获取信息,但不要将此信息作为当前信息提供给用户,因为 CICS 不支持高速缓存。 |
| 305 使用代理 | 服务器希望您将指定的代理用于您的请求。 | 使用服务器提供的 URL(在 Location 头)发出新请求。 |
| 307 临时重定向 | 关于“302 已找到”。 | 关于“302 已找到”。 |
| 400 错误请求 | 您的请求的语法不正确。 | 检查请求,进行更改并再试一次。 |
| 401 未授权 | 服务器需要权限;或者,已拒绝您提供的权限。 | 请参阅 CICS (r) 作为 HTTP 客户端:身份验证和识别。 |
| 403 禁止 | 服务器拒绝您的请求。 | 不要重复请求。 消息体可能包含有关为何拒绝请求的信息。 |
| 404 未找到 | 服务器未找到请求的 URL。 | 检查是否如您希望的指定请求。 因为这种情况可能是暂时的,所以考虑稍后再试一次。 |
| 405 不允许的方法 | 您指定了该资源不支持的方法。 | 读响应中的 Allow 头以获取受支持的方法的列表,并在需要时使用其中某种方法发出新请求。 |
| 406 不可接受 | 您使用 Accept 头发出了请求,但服务器没有满足您的标准的资源版本。 | 检查消息体以获取有关服务器具有的资源的信息,并在需要时对其中某个资源发出新请求。 |
| 407 需要代理认证 | 代理服务器需要权限;或者,已拒绝您提供的权限。 | 请参阅 CICS (r) 作为 HTTP 客户端:身份验证和识别。 |
| 408 请求超时 | 服务器将不再等待您来完成您的请求。 | 需要时重复请求。 检查您的应用程序是否未花较长的时间来汇编和发送消息。 |
| 409 冲突 | 已更改资源并且无法将您的请求应用到资源,因为它现在处于停止状态。 | 检查消息体以获取有关冲突原因的信息,并在需要时根据该信息发出新请求。 |
| 410 不可用 | 资源永久地不可用。 | 将来不要重复请求。 |
| 411 需要长度 | 服务器要求您提供 Content-Length 头。 | CICS 通常提供该头,除非您在 TCPIPSERVICE 定义上使用 USER 协议。 如果是这种情况,那么自己写头并发出新请求。 |
| 412 预备条件失败 | 您发出了有条件的请求且条件未满足。 | 按计划继续处理,注意,未应用您的请求中指定的任何操作。 |
| 413 请求实体太大 | 您的消息体太大使得服务器无法处理。 | 读 Retry-After 头以查看这种情况是否是暂时的。 您可以等待,或缩短消息体的长度并再试一次。 您可能需要打开新连接。 |
| 414 请求 URI 太长 | 您的请求 URL 太长使得服务器无法处理。 | 检查请求并再试一次,或放弃请求。 |
| 415 不支持的介质类型 | 您发送了一个消息体,而它具有服务器(对于该资源)不支持的介质类型或内容编码。 | 检查您已指定的介质类型,并且如果出错,那么改正并重复请求。 |
| 416 无法满足请求的范围 | 您使用 Range 头字段发出请求,但该范围未出现在资源中。 | 读 Content-Range 头以查看资源的实际长度,并在需要时用合适的字节范围重复请求。 |
| 417 未达到期望的 | 在 WEB SEND 命令中使用了 ACTION(EXPECT) 选项,但服务器不接受全部消息发送。 | 您可以在不带 ACTION (EXPECT) 选项的情况下重复同一请求,但这可能会再次失败。 检查是否正确指定请求,并且如果出错,那么改正并重复请求。 |
| 500 内部服务器错误 | 由于意外的错误,服务器无法处理请求。 | 因为这种情况可能是暂时的,所以考虑稍后再尝试请求一次。 |
| 501 未实施 | 服务器不支持该请求方法。 | 不要重复请求。 |
| 502 错误网关 | 您的请求已通过代理或网关,而它已接收到来自另一个服务器的无效响应。 | 因为这种情况可能是暂时的,所以考虑稍后再尝试请求一次,或许可能的话,避开该代理或网关。 |
| 503 服务不可用 | 服务器暂时无法处理请求。 | 读 Retry-After 头以查看这种情况是否是暂时的,如果是,那么过一会儿再试一次。 |
| 504 网关超时 | 您的请求已通过代理或网关,而它未接收到来自另一个服务器的及时响应。 | 需要时重复请求,或许可能的话,避开该代理或网关。 |
| 505 不支持的 HTTP 版本 | 不应使用。 CICS Web Support 使用 HTTP/1.1 作为版本发送客户机请求。 | 用户应用程序不应接收该状态码。 |