[この API を試す] パネルで不明なエラーが発生しました

<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">
  1. 2XX 以外のレスポンスが想定される場合にのみ、問題が発生することを確認します。
  2. リクエストが失敗する場合は、プロキシフローにポリシーがあることを確認します。
  3. <ph type="x-smartling-placeholder"></ph> リクエストをトレースし、 continueOnError="false" でエラーが発生し、エラーが発生しています。
    1. 「はい」の場合は、 <ph type="x-smartling-placeholder"></ph> AssignMessage CORS ポリシーが実行されたか、エラーが発生しなかったか できます。
    2. そうでない場合、それがこの問題の原因です。
      これは、 要素を持つすべてのポリシー continueOnError="false" が失敗すると、リクエストは エラー レスポンス フロー。明示的な障害処理が用意されていない場合、 エラー レスポンス フローが返され、それに対応するデフォルトのエラー レスポンスが ポリシーに送り返されますこのエラー レスポンスに何も含まれていない CORS ヘッダー。その結果、統合された開発者からの API 呼び出しは、 ポータルが Unknown error で失敗する。

次のスクリーンショットは、エラー メッセージの例と、 成功メッセージが表示されます。

統合ポータルの [この API を試す] パネルのエラー メッセージの例 プロキシの [Trace] ウィンドウで次の操作を行います。

エラー メッセージの例、クリックして画像を拡大 エラー メッセージの例

統合ポータルの [この API を試す] パネルの成功メッセージの例 プロキシの [Trace] ウィンドウで次の操作を行います。

成功メッセージの例、クリックして画像を拡大 成功メッセージの例

解決策

  1. デフォルトのエラー メッセージに頼る代わりに、 <ph type="x-smartling-placeholder"></ph> エラー レスポンスを処理するために、障害ルールを実装する必要があります。 を含める AssignMessage CORS ポリシーを適切なヘッダーで呼び出し、 (<ph type="x-smartling-placeholder"></ph>) FaultRule を実装します。
  2. 場合によっては、ネットワークごとに障害ルールを定義できない 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 に複数の値がある

診断

  1. アプリケーションの Access-Control-Allow-Origin ヘッダーの値をチェックする <ph type="x-smartling-placeholder"></ph> トレース セッションを記録します。
  2. Access-Control-Allow-Origin ヘッダーで許可される値は 1 つだけです。 定義します。複数の値を設定すると CORS の問題が発生し、 レスポンスをレンダリングできません。
  3. トレース内の Access-Control-Allow-Origin ヘッダーの値が 次のようになります。
    *,*
    これは、ターゲット サーバーと AssignMessage CORS ポリシーによって値が設定されます。
  4. これは、ユーザーが Access-Control-Allow-Origin 用の <Add> element( またはバックエンド自体が複数の値を設定しています。

*,* と等しい Access-Control-Allow-Origin の例:

複数の値が使用されている例、クリックして画像を拡大 複数の値を使用する例

* と等しい Access-Control-Allow-Origin の例:

単一の値を使用した例、クリックして画像を拡大 使用される単一の値の例

<Add> の使用例:

[追加] を使用した例、クリックして画像を拡大 追加の例

<Set> の使用例:

Set を使用した例、クリックして画像を拡大 Set を使用した例

解決策

  1. 推奨されるアプローチは、 <Set> elementAccess-Control-Allow-Origin <Add> element など) 指定できる値は 1 つだけです
  2. または、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 リクエストのトレース ファイル
  • ターゲット/バックエンド サーバーからのレスポンスの完全な出力と、 ペイロードのサイズ