<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
症状
統合デベロッパー ポータルからの API 呼び出しが失敗し、
Unknown Error
、または
この API を試す
できます。
エラー メッセージ
空のレスポンス、または API に関する次のエラー メッセージが表示される場合があります。 統合ポータルで管理できます。
Unknown Error<ph type="x-smartling-placeholder">
デベロッパー ツール >コンソールのタブを開くと、次の画面が表示されます。 error:
Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
ページに表示されている一般的なエラー メッセージ <ph type="x-smartling-placeholder"></ph> デベロッパー ツール >[Console] タブの内容は次のとおりです。
考えられる原因
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
未処理のポリシー障害 | API リクエストのランタイム フローでいずれかのポリシーが失敗した場合、CORS ヘッダーなしでデフォルトのエラー レスポンスが送信されます。 | Edge Public Cloud ユーザー |
Access-Control-Allow-Origin に複数の値 | Assign Message ポリシーで Set ではなく Add を使用。 | Edge Public Cloud ユーザー |
原因: 未処理のポリシー障害
<ph type="x-smartling-placeholder">診断
<ph type="x-smartling-placeholder">2XX
以外のレスポンスが想定される場合にのみ、問題が発生することを確認します。- リクエストが失敗する場合は、プロキシフローにポリシーがあることを確認します。
- <ph type="x-smartling-placeholder"></ph>
リクエストをトレースし、
continueOnError="false"
でエラーが発生し、エラーが発生しています。 - 「はい」の場合は、 <ph type="x-smartling-placeholder"></ph> AssignMessage CORS ポリシーが実行されたか、エラーが発生しなかったか できます。
- そうでない場合、それがこの問題の原因です。
これは、 要素を持つすべてのポリシーcontinueOnError="false"
が失敗すると、リクエストは エラー レスポンス フロー。明示的な障害処理が用意されていない場合、 エラー レスポンス フローが返され、それに対応するデフォルトのエラー レスポンスが ポリシーに送り返されますこのエラー レスポンスに何も含まれていない CORS ヘッダー。その結果、統合された開発者からの API 呼び出しは、 ポータルがUnknown error
で失敗する。
次のスクリーンショットは、エラー メッセージの例と、 成功メッセージが表示されます。
統合ポータルの [この API を試す] パネルのエラー メッセージの例 プロキシの [Trace] ウィンドウで次の操作を行います。
統合ポータルの [この API を試す] パネルの成功メッセージの例 プロキシの [Trace] ウィンドウで次の操作を行います。
解決策
- デフォルトのエラー メッセージに頼る代わりに、 <ph type="x-smartling-placeholder"></ph> エラー レスポンスを処理するために、障害ルールを実装する必要があります。 を含める AssignMessage CORS ポリシーを適切なヘッダーで呼び出し、 (<ph type="x-smartling-placeholder"></ph>) FaultRule を実装します。
- 場合によっては、ネットワークごとに障害ルールを定義できない fault(障害)デフォルトの障害ルールを実装して CORS ポリシーをサポートしています。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ProxyEndpoint name="proxy-endpoint-name"> <Description/> <!-- Add a default fault rule to add CORS --> <DefaultFaultRule name="fault-rule"> <Step> <Name>add-cors</Name> </Step> </DefaultFaultRule> <FaultRules/> <!-- <Flows /> Rest of the proxy definition --> </ProxyEndpoint>
原因: Access-Control-Allow-Origin に複数の値がある
診断
- アプリケーションの Access-Control-Allow-Origin ヘッダーの値をチェックする <ph type="x-smartling-placeholder"></ph> トレース セッションを記録します。
- Access-Control-Allow-Origin ヘッダーで許可される値は 1 つだけです。 定義します。複数の値を設定すると CORS の問題が発生し、 レスポンスをレンダリングできません。
- トレース内の Access-Control-Allow-Origin ヘッダーの値が
次のようになります。
*,*
これは、ターゲット サーバーと AssignMessage CORS ポリシーによって値が設定されます。 - これは、ユーザーが
Access-Control-Allow-Origin 用の
<Add> element
( またはバックエンド自体が複数の値を設定しています。
*,*
と等しい Access-Control-Allow-Origin の例:
*
と等しい Access-Control-Allow-Origin の例:
<Add>
の使用例:
<Set>
の使用例:
解決策
- 推奨されるアプローチは、
<Set> element
( Access-Control-Allow-Origin の<Add> element
など) 指定できる値は 1 つだけです - または、Access-Control-Allow-Origin ヘッダーを 1 か所または <ph type="x-smartling-placeholder"></ph> AssignMessage CORS ポリシーまたはターゲット サーバー。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors"> <DisplayName>Set CORS</DisplayName> <FaultRules/> <Properties/> <Set> <Headers> <Header name="Access-Control-Allow-Origin">*</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Apigee サポートのサポートが必要な場合は、 診断情報の収集が必要な場合。
診断情報の収集が必要な場合
以下の診断情報を収集して連絡する Apigee Edge サポート:
- 組織名
- 環境名
- API プロキシ名
- エラーを再現するための完全な curl コマンド
- API リクエストのトレース ファイル
- ターゲット/バックエンド サーバーからのレスポンスの完全な出力と、 ペイロードのサイズ