flow.*
|
|
flow.APITimedOut |
|
504 Gateway Timeout |
|
API timed out |
|
在以下情况下,会发生此错误:
- 后端服务器在特定 API 代理的属性
api.timeout 配置的超时期限内不会做出响应。
- 由于计算密集型操作、高负载或性能不佳,政策需要很长时间。
|
注意:此 Playbook 提供了有关排查错误代码 messaging.adaptors.http.flow.GatewayTimeout 的说明;不过,您也可以使用相同的 Playbook 来排查错误代码 flow.APITimedOut 。
|
|
策略指南
|
flow.SharedFlowNotFound |
|
500 Internal Server Error |
|
Shared Flow {shared_flow_name} Not Found |
|
如果特定的共享流存在以下情况,则会出现此错误:
|
|
手册
|
messaging.adaptors.http.flow
|
|
messaging.adaptors.http.flow.ApplicationNotFound |
|
404 Not Found |
|
|
Unable to identify proxy for host: {virtual_host} and url: {pathsuffix} |
|
|
在以下情况下,会发生此错误:
- 具体 API 代理如下:
- 未配置为在特定虚拟主机上接受请求
- 未配置为接受请求中使用的特定路径上的请求
- 未部署在您尝试发出 API 请求的特定环境中
- 未部署在一个或多个消息处理器上
- 您尝试发出 API 请求的特定环境未加载到一个或多个消息处理器上
|
使用指南 |
|
如果多个虚拟主机具有相同的主机别名和端口号,也可能会发生此错误。 |
策略指南 |
|
|
messaging.adaptors.http.flow.DecompressionFailureAtRequest |
|
400 Bad Request |
|
Decompression failure at request |
|
仅在以下情况下,会发生此错误:
- HTTP 请求标头
Content-Encoding 中指定的编码有效且
受 Apigee Edge 支持,
但是
- 客户端作为 HTTP 请求的一部分发送的载荷格式与
Content-Encoding 标头中指定的编码格式不匹配
|
|
手册
|
messaging.adaptors.http.flow.DecompressionFailureAtResponse |
|
502 Bad Gateway |
|
Decompression failure at response |
|
仅在以下情况下,会发生此错误:
- 后端/目标服务器的 HTTP 响应标头
Content-Encoding 中指定的编码有效,并且
Apigee Edge 支持。
但是
- 后端/目标服务器在 HTTP 响应中发送的载荷格式与
Content-Encoding 标头中指定的编码格式不匹配
|
|
手册
|
messaging.adaptors.http.flow.ErrorResponseCode |
|
500 |
手册
视频
|
|
错误消息和格式可能因后端服务器实现而异。 |
|
|
如果后端服务器向 Apigee Edge 返回状态代码 500 ,则会出现此错误。 |
|
|
503 |
使用指南
视频
|
|
错误消息和格式可能因后端服务器实现而异。 |
|
|
如果后端服务器向 Apigee Edge 返回状态代码 503 ,则会出现此错误。 |
|
|
504 |
手册
|
|
错误消息和格式可能因后端服务器实现而异。 |
|
|
如果后端服务器向 Apigee Edge 返回状态代码 504 ,则会出现此错误。 |
|
注意:在发送到客户端应用的错误消息中,系统不会返回错误代码 messaging.adaptors.http.flow.ErrorResponseCode 。这是因为每当后端服务器返回错误以及任何 4XX 或 5XX 状态代码时,Apigee Edge 都会设置此错误代码。您可以在 API Monitoring、NGINX 访问日志或分析数据库中查看此错误代码。
|
|
|
messaging.adaptors.http.flow.GatewayTimeout |
|
504 Gateway Timeout |
|
Gateway Timeout |
|
如果后端服务器未在消息处理器上配置的
I/O 超时期限内响应 Apigee Edge 消息处理器,则会出现此错误。 |
|
策略指南 |
messaging.adaptors.http.flow.LengthRequired |
|
411 Length Required |
|
'Content-Length' is missing |
|
如果客户端应用未将 Content-Length 标头作为发送到 Apigee Edge 的 HTTP POST 和 PUT 请求的一部分进行传递,则会发生此错误。 注意:无法在跟踪工具中捕获因此错误而失败的请求,因为消息处理器在非常早的阶段(远早于处理请求并在 API 代理中执行任何政策之前)执行此验证。 |
|
RFC 第 3.3.2 节:内容长度 |
|
修复
要解决此错误,请执行以下步骤:
-
确保客户端应用始终将标头 Content-Length 作为 HTTP POST 和 PUT 请求的一部分传递给 Apigee Edge。例如:
curl -X POST https://HOSTALIAS/PATH -d '{"name": "abc"}' -H "Content-Length: 15"
即使您使用 POST 和 PUT 请求传递空载荷,请确保传递标头 Content-Length: 0 。例如:
curl -X POST https://HOSTALIAS/PATH -H "Content-Length: 0"
|
messaging.adaptors.http.flow.NoActiveTargets |
|
503 Service Unavailable |
|
|
The Service is temporarily unavailable |
|
|
如果您在 Apigee Edge 中使用
TargetServer,则在以下情况下会出现此错误:
- 自定义授权服务器对后端服务器主机的 DNS 解析不正确,导致 IP 地址错误,进而导致连接错误。
- 连接超时错误原因如下:
- 后端服务器上的防火墙限制会阻止 Apigee Edge 连接到后端服务器。
- Apigee Edge 和后端服务器之间的网络连接问题。
- TargetServer 中指定的主机不正确或包含不需要的字符(例如空格)。
|
策略指南
视频
|
|
如果配置为监控目标服务器的健康检查的健康检查失败,也可能会发生此错误。 |
使用指南
视频
|
|
|
messaging.adaptors.http.flow.RequestTimeOut |
|
408 Request Timeout |
|
Request timed out |
|
如果 Apigee Edge 消息处理器在消息处理器组件上配置的
I/O 超时期限内没有从客户端应用接收到请求载荷,则会出现此错误。 |
|
修复
确保客户端应用在 Apigee Edge 的消息处理器组件上配置的
I/O 超时期限内发送请求载荷。
|
messaging.adaptors.http.flow.ServiceUnavailable |
|
503 Service Unavailable |
|
|
The Service is temporarily unavailable |
|
|
在以下情况下,会发生此错误:
- 自定义授权服务器对后端服务器主机的 DNS 解析不正确,导致 IP 地址错误,进而导致连接错误。
- 连接超时错误原因如下:
- 后端服务器上的防火墙限制会阻止 Apigee Edge 连接到后端服务器。
- Apigee Edge 与后端服务器之间的网络连接问题。
- 目标端点中指定的目标服务器主机不正确或包含不需要的字符(例如空格)。
|
使用指南
DNS 失败:
视频
网络连接:
视频
|
|
如果后端服务器在请求处理器仍在向后端服务器发送请求载荷时过早关闭连接,也可能会出现此错误。 |
手册
|
|
|
messaging.adaptors.http.flow.SslHandshakeFailed |
|
503 Service Unavailable |
|
SSL Handshake failed {error_message} |
|
在以下情况下,在 Apigee Edge 的消息处理器和后端服务器之间的 SSL 握手过程中会出现此错误:
- Apigee Edge 的消息处理器的信任库:
- 包含与后端服务器的完整证书链不匹配的证书链
或
- 不包含后端服务器的完整证书链
- 后端服务器提供的证书链:
- 包含与目标端点中指定的主机名不匹配的完全限定域名 (FQDN)
或
- 包含的证书链不正确/不完整
|
|
策略指南
视频
|
messaging.adaptors.http.flow.UnexpectedEOFAtTarget |
|
502 Bad Gateway |
|
Unexpected EOF at target |
|
在以下情况下,会发生此错误:
-
TargetServer 未正确配置,无法在 Apigee Edge 中支持 TLS/SSL 连接。
- 当 Apigee Edge 等待后端服务器的响应时,后端服务器可能会突然关闭连接。
- Apigee 和后端服务器上的 keep-alive 超时配置不正确。
|
|
使用指南 |
|
messaging.runtime.*
|
|
messaging.runtime.RouteFailed |
|
500 Internal Server Error |
|
Unable to route the message to a TargetEndpoint |
|
如果 Apigee Edge 出于以下原因无法将请求路由到任何目标端点,则会发生此错误:
- 代理中没有与请求匹配的路由规则 (
<RouteRule> ) 条件
且
- ProxyEndpoint 中没有定义默认路由规则(即没有任何条件的
<RouteRule> )
|
|
修复
要解决此错误,请按照以下说明操作:
- 查看 ProxyEndpoint 中定义的路由规则并进行修改,以确保至少有一个路由规则条件与您的请求相匹配。
- 如果存在多个 RouteRule,则建议您定义一个不带任何条件的默认路由规则。
- 确保默认路由规则始终在条件路由列表中最后定义,因为规则是在 ProxyEndpoint 中自上而下进行评估的。
如需详细了解如何在 ProxyEndpoint 中定义 <RouteRule> 条件,请参阅条件目标。
|
messaging.runtime.SenseRaiseFault |
|
403 Forbidden |
|
Sense Fault |
|
如果 API 请求是从 Apigee Sense 规则中被屏蔽的特定客户端 IP 地址发出的,则会发生此错误。 |
|
|
protocol.http.* - Caused due to bad request
|
|
|
|
500 Internal Server Error |
|
Bad Form Data |
|
当且仅当满足以下所有条件时,会出现此错误:
- 客户端向 Apigee Edge 发送的 HTTP 请求包含:
Content-Type: application/x-www-form-urlencoded 和
- 带有百分号 (%) 或百分号 (%) 后跟无效的十六进制字符的表单数据,这些字符根据表单 - 第 17.13.4.1 节是不允许的。
- Apigee Edge 中的 API 代理会读取特定表单参数,其中包含请求流中使用 ExtractVariables 或 AssignMessage 政策不允许使用的任何字符。
|
|
策略指南 |
|
|
400 Bad Request |
|
Duplicate Header "{header_name}" |
|
如果特定 HTTP 标头不允许在 Apigee Edge 中包含重复项,并且它作为客户端应用发送到 Apigee Edge 的 HTTP 请求的一部分出现相同或不同的值,则会出现此错误。 |
|
RFC 7230 第 3.2.2 节:字段顺序 |
|
手册
|
|
|
400 Bad Request |
|
Header name cannot be empty |
|
如果客户端应用作为 HTTP 请求的一部分发送到 Apigee Edge 的标头名称为空,则会发生此错误。 |
|
RFC 7230 第 3.2 节:标头字段 |
|
|
|
|
|
|
|
|
protocol.http.InvalidPath |
|
|
protocol.http.TooBigBody |
|
413 Request Entity Too Large |
|
Body buffer overflow |
|
如果客户端应用作为 HTTP 请求的一部分发送到 Apigee Edge 的载荷大小大于 Apigee Edge 中允许的限制,则会发生此错误。 |
|
Apigee Edge 限制 |
|
策略指南 |
|
|
使用指南 |
protocol.http.TooBigLine |
|
414 Request-URI Too Long |
|
request line size exceeding {limit} |
|
如果客户端应用作为 HTTP 请求的一部分发送到 Apigee Edge 的请求行大小大于 Apigee Edge 中允许的限制,则会发生此错误。 |
|
Apigee Edge 限制 |
|
策略指南 |
protocol.http.UnsupportedEncoding |
|
策略指南 |
protocol.http.* - Caused by target
|
|
protocol.http.BadPath |
|
策略指南 |
|
|
502 Bad Gateway |
|
Duplicate Header "{header_name}" |
|
如果 Apigee Edge 中不允许有重复的特定 HTTP 标头,在后端服务器向 Apigee Edge 发送 HTTP 响应中多次出现具有相同或不同值时,就会出现此错误。
|
|
RFC 7230 第 3.2.2 节:字段顺序 |
|
手册
|
|
|
|
protocol.http.EmptyPath |
|
策略指南 |
|
|
|
|
|
|
protocol.http.ProxyTunnelCreationFailed |
|
503 Service Unavailable |
|
Proxy refused to create tunnel with response status {status code} |
|
由于防火墙、ACL(访问控制列表)、DNS 问题、后端服务器的可用性等,代理服务器在 Apigee Edge 和后端服务器之间创建隧道时,会发生此错误。
注意:错误消息 (faultstring ) 中的状态代码提供了导致此问题的简要原因。
|
|
手册
|
protocol.http.Response306Reserved |
|
502 Bad Gateway |
|
Response Status code 306 is reserved, so can't be used. |
|
如果后端服务器将 306 状态代码返回给 Apigee Edge,则会发生此错误。
306 状态代码是在旧版 HTTP 规范中定义的。根据当前的 HTTP 规范,此代码已预留,不应使用。
|
|
RFC 7231 第 6.3.5 节:预留 306 |
|
修复
由于状态代码 306 已被预留,因此请确保您的后端服务器在向 Apigee Edge 发送响应时不使用此状态代码。
|
|
|
策略指南 |
protocol.http.ResponseWithBody |
|
502 Bad Gateway |
|
Received {status_code} Response with message body |
|
如果从后端服务器到 Apigee Edge 的 HTTP 响应是 204 No Content 或 205 Reset Content ,但它包含响应正文和/或以下一个或多个标头,则会发生此错误:
Content-Length
Content-Encoding
Transfer-Encoding
|
|
RFC 7231 第 6.3.5 节:204 无内容和 RFC 7231 第 6.3.6 节:205 重置内容 |
|
策略指南 |
protocol.http.TooBigBody |
|
502 Bad Gateway |
|
Body buffer overflow |
|
如果客户端应用作为 HTTP 请求的一部分发送到 Apigee Edge 的载荷大小大于 Apigee Edge 中允许的限制,则会发生此错误。 |
|
Apigee Edge 限额 |
|
策略指南 |
|
|
502 Bad Gateway |
|
response headers size exceeding {limit} |
|
如果后端服务器作为对 Apigee Edge 的 HTTP 响应的一部分发送的所有响应标头的总大小大于 Apigee Edge 中允许的限制,则会发生此错误。 |
|
Apigee Edge 限制 |
|
使用指南 |
protocol.http.TooBigLine |
|
502 Bad Gateway |
|
response line size exceeding {limit} |
|
如果后端服务器在 HTTP 响应中向 Apigee Edge 发送的响应行大小超过 Apigee Edge 中允许的限额,就会发生此错误。
|
|
Apigee Edge 限额 |
|
策略指南 |
protocol.http.UnsupportedEncoding |
|
策略指南 |
security.util.*
|
|
security.util.KeyAliasNotFound |
|
500 Internal Server Error |
|
KeyAlias {KeyAlias_name} is not found in
Keystore {Keystore_Name} |
|
如果 TargetEndpoint 或 TargetServer 中引用的特定 KeyAlias 在特定密钥库中找不到,则会发生此错误。
|
|
修复
确保 TargetEndpoint 或 TargetServer 中指定的 KeyAlias 存在且属于特定密钥库。
|
security.util.TrustStoreWithNoCertificates |
|
500 Internal Server Error |
|
TrustStore {truststore_name} has no certificates |
|
如果 TargetEndpoint 或 TargetServer 中引用的特定信任库不包含任何证书,则会发生此错误。
|
|
修复
如果您要验证后端服务器的证书,并且希望在 TargetEndpoint 或 TargetServer 中使用信任库,请确保信任库包含后端服务器的有效证书。
|