flow.*
|
|
flow.APITimedOut |
|
504 Gateway Timeout |
|
API timed out |
|
發生這個錯誤的原因如下:
- 後端伺服器未在特定 API Proxy 的
api.timeout 屬性設定的逾時期間內回應。
- 由於需要大量運算作業、負載過高或效能不佳,導致政策耗費很長時間。
|
|
注意:本劇本提供排解錯誤代碼 messaging.adaptors.http.flow.GatewayTimeout 的操作說明,但您也可以使用相同劇本排解 flow.APITimedOut 錯誤代碼。
|
|
教戰手冊
|
flow.SharedFlowNotFound |
|
500 Internal Server Error |
|
Shared Flow {shared_flow_name} Not Found |
|
如果特定共用流程有下列情況,就會發生這個錯誤:
|
|
PLAYBOOK
|
messaging.adaptors.http.flow
|
|
messaging.adaptors.http.flow.ApplicationNotFound |
|
404 Not Found |
|
|
Unable to identify proxy for host: {virtual_host} and url: {pathsuffix} |
|
|
發生這項錯誤的原因如下:
- 具體的 API Proxy 如下:
- 未設定為接受特定虛擬主機的要求
- 未設定為接受要求中使用的特定路徑上的要求
- 並未部署在您嘗試發出 API 要求的特定環境中
- 未部署在一或多個訊息處理器上
- 您嘗試發出 API 要求的特定環境,未載入一或多個訊息處理器
|
教戰手冊 |
|
如果多個虛擬主機具有相同的主機別名和連接埠號碼,也可能發生這個錯誤。 |
教戰手冊 |
|
|
messaging.adaptors.http.flow.DecompressionFailureAtRequest |
|
400 Bad Request |
|
Decompression failure at request |
|
只有在下列情況下才會發生這個錯誤:
- HTTP 要求標頭
Content-Encoding 中指定的編碼有效,且
Apigee Edge 支援該編碼,
BUT
- 用戶端在 HTTP 要求中傳送的酬載格式,與
Content-Encoding 標頭中指定的編碼格式不符
|
|
PLAYBOOK
|
messaging.adaptors.http.flow.DecompressionFailureAtResponse |
|
502 Bad Gateway |
|
Decompression failure at response |
|
只有在下列情況下才會發生這個錯誤:
- 後端/目標伺服器的 HTTP 回應標頭
Content-Encoding 中指定的編碼有效,且
Apigee Edge 支援該編碼。
BUT
- 後端/目標伺服器在 HTTP 回應中傳送的酬載格式,與
Content-Encoding 標頭中指定的編碼格式不符
|
|
PLAYBOOK
|
messaging.adaptors.http.flow.ErrorResponseCode |
|
500 |
PLAYBOOK
影片
|
|
錯誤訊息和格式可能因後端伺服器實作方式而異。 |
|
|
如果後端伺服器傳回 500 狀態碼給 Apigee Edge,就會發生這個錯誤。 |
|
|
503 |
PLAYBOOK
影片
|
|
錯誤訊息和格式可能因後端伺服器實作方式而異。 |
|
|
如果後端伺服器傳回 503 狀態碼給 Apigee Edge,就會發生這個錯誤。 |
|
|
504 |
PLAYBOOK
|
|
錯誤訊息和格式可能因後端伺服器實作方式而異。 |
|
|
如果後端伺服器傳回 504 狀態碼給 Apigee Edge,就會發生這個錯誤。 |
|
|
注意:錯誤代碼 messaging.adaptors.http.flow.ErrorResponseCode 不會隨傳送至用戶端應用程式的錯誤訊息一併傳回。這是因為每當後端伺服器傳回錯誤,以及任何 4XX 或 5XX 狀態碼時,Apigee Edge 都會設定這個錯誤代碼。您可以在 API 監控、NGINX 存取記錄或 Analytics 資料庫中查看這個錯誤碼。
|
|
|
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 Proxy 中的任何政策,因此您無法在追蹤工具中擷取因這個錯誤而失敗的要求。 |
|
RFC 第 3.3.2 節:Content-Length |
|
修正
如要解決這項錯誤,請按照下列步驟操作:
-
請確保用戶端應用程式一律會將標頭 Content-Length 做為傳送至 Apigee Edge 的 HTTP POST 和 PUT 要求的一部分。例如:
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 Message Processor 未在 Message Processor 元件上設定的
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 失敗:
影片
網路連線:
影片
|
|
如果訊息處理器仍在將要求酬載傳送至後端伺服器,但後端伺服器過早關閉連線,也可能發生這項錯誤。 |
PLAYBOOK
|
|
|
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 無法將要求路由至任何 TargetEndpoint,就會發生這個錯誤,原因如下:
- Proxy 中沒有符合要求的路由規則 (
<RouteRule>) 條件
且
- ProxyEndpoint 中未定義預設路由規則 (即
<RouteRule> 無任何條件)
|
|
修正
如要解決這項錯誤,請按照下列指示操作:
- 請檢查 ProxyEndpoint 中定義的路由規則,並進行修改,確保至少有一項路由規則條件符合您的要求。
- 如果有多個 RouteRule,建議定義沒有條件的預設路由規則。
- 請務必在條件式路由清單中最後定義預設路由規則,因為系統會在 ProxyEndpoint 中由上而下評估規則。
如要進一步瞭解如何在 ProxyEndpoint 中定義條件,請參閱「<RouteRule>條件式目標」。
|
messaging.runtime.SenseRaiseFault |
|
403 Forbidden |
|
Sense Fault |
|
如果從特定用戶端 IP 位址發出 API 要求,且該位址因 Apigee Sense 規則遭到封鎖,就會發生這項錯誤。 |
|
|
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 Proxy 會在要求流程中,使用 ExtractVariables 或 AssignMessage 政策,讀取含有任何不允許字元的特定表單參數。
|
|
教戰手冊 |
|
|
400 Bad Request |
|
Duplicate Header "{header_name}" |
|
如果特定 HTTP 標頭在 Apigee Edge 中不允許重複,但用戶端應用程式傳送至 Apigee Edge 的 HTTP 要求中,該標頭出現一次以上,且值相同或不同,就會發生這項錯誤。
|
|
RFC 7230 第 3.2.2 節:欄位順序 |
|
PLAYBOOK
|
|
|
400 Bad Request |
|
Header name cannot be empty |
|
如果用戶端應用程式傳送至 Apigee Edge 的 HTTP 要求中,標頭名稱為空白,就會發生這個錯誤。 |
|
RFC 7230 第 3.2 節:標頭欄位 |
|
|
|
|
|
|
|
|
protocol.http.InvalidPath |
|
修正
請確認用戶端應用程式傳送至 Apigee Edge 的 HTTP 要求網址路徑,不含 RFC 3986 第 3.3 節「路徑」中不允許的字元。
|
protocol.http.MessageReadError |
|
502 Bad Gateway |
|
Unexpected I/O after message headers have been read. |
|
MP 在非預期情況下透過管道接收 I/O 時,就會發生這種罕見錯誤。MP 正在讀取要求,已讀取所有標頭,並設定為讀取要求酬載。然後遇到似乎是針對相同標頭的 I/O 事件。 |
|
修正
找出記錄訊息,進一步瞭解發生了什麼事。
logger.atSevere().log(
"Unexpected I/O after message headers have been read. Channel diagnostics=%s."
+ " HeartBeat=%s",
input.client().getDiagnostic(), message.getHeaders().isHeartBeat());
|
protocol.http.TooBigBody |
|
413 Request Entity Too Large |
|
Body buffer overflow |
|
如果用戶端應用程式傳送至 Apigee Edge 的 HTTP 要求酬載大小,超過 Apigee Edge 允許的上限,就會發生這個錯誤。 |
|
Apigee Edge 限制 |
|
教戰手冊 |
|
|
教戰手冊 |
protocol.http.TooBigLine |
|
414 Request-URI Too Long |
|
request line size exceeding {limit} |
|
如果用戶端應用程式傳送至 Apigee Edge 的 HTTP 要求中,要求行的大小超過 Apigee Edge 允許的上限,就會發生這個錯誤。 |
|
Apigee Edge 限制 |
|
教戰手冊 |
protocol.http.UnsupportedEncoding |
|
415 Unsupported Media |
|
Unsupported Encoding "{encoding}" |
|
如果用戶端傳送的 Content-Encoding 標頭 (屬於 HTTP 回應的一部分) 包含 Apigee Edge 不支援的編碼/酬載格式,就會發生這個錯誤。 |
|
RFC 7231 第 6.5.13 節:415 不支援的媒體類型 |
|
教戰手冊 |
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 節:欄位順序 |
|
PLAYBOOK
|
|
|
502 Bad Gateway |
|
Header name cannot be empty |
|
如果後端伺服器傳送給 Apigee Edge 的 HTTP 回應中,標頭名稱為空白,就會發生這個錯誤。 |
|
RFC 7230 第 3.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) 會提供問題的高階原因。
|
|
PLAYBOOK
|
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 Reserved |
|
修正
由於狀態碼 306 為保留狀態,請確保後端伺服器在傳送 Apigee Edge 回應時,不會使用這個狀態碼。
|
|
|
教戰手冊 |
protocol.http.ResponseWithBody |
|
教戰手冊 |
protocol.http.TooBigBody |
|
502 Bad Gateway |
|
Body buffer overflow |
|
如果用戶端應用程式傳送至 Apigee Edge 的 HTTP 要求酬載大小,超過 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} |
|
如果後端伺服器傳送給 Apigee Edge 的 HTTP 回應中,回應行的長度超過 Apigee Edge 允許的上限,就會發生這個錯誤。
|
|
Apigee Edge 限制 |
|
教戰手冊 |
protocol.http.UnsupportedEncoding |
|
415 Unsupported Media |
|
Unsupported Encoding "{encoding}" |
|
如果後端伺服器在 HTTP 回應中傳送的 Content-Encoding 標頭包含 Apigee Edge 不支援的編碼/酬載格式,就會發生這個錯誤。 |
|
RFC 7231 第 6.5.13 節:415 不支援的媒體類型 |
|
教戰手冊 |
security.util.*
|
|
security.util.KeyAliasNotFound |
|
500 Internal Server Error |
|
KeyAlias {KeyAlias_name} is not found in
Keystore {Keystore_Name} |
|
如果 TargetEndpoint 或 TargetServer 中參照的特定 KeyAlias 未在特定 Keystore 中找到,就會發生這項錯誤。
|
|
修正
確認 TargetEndpoint 或 TargetServer 中指定的 KeyAlias 存在,且屬於特定 Keystore。
|
security.util.TrustStoreWithNoCertificates |
|
500 Internal Server Error |
|
TrustStore {truststore_name} has no certificates |
|
如果 TargetEndpoint 或 TargetServer 參照的特定 Truststore 不含任何憑證,就會發生這項錯誤。
|
|
修正
如要驗證後端伺服器的憑證,並在 TargetEndpoint 或 TargetServer 中使用 Truststore,請確保 Truststore 包含後端伺服器的有效憑證。
|