Неизвестная ошибка в панели Попробуйте этот API

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Симптом

Вызов API из интегрированного портала разработчика завершается с Unknown Error или пустой ответ на панели «Попробуйте этот API» .

Сообщения об ошибках

Вы можете увидеть пустой ответ или следующее сообщение об ошибке для запросов API на интегрированном портале:

Unknown 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.

Общее сообщение об ошибке, отображаемое на вкладке «Инструменты разработчика» > «Консоль», выглядит следующим образом:

общее сообщение об ошибке, нажмите, чтобы увеличить изображениеобщее сообщение об ошибке

Возможные причины

Причина Описание Инструкции по устранению неполадок применимы для
Необработанная ошибка политики Ответ об ошибке по умолчанию отправляется без заголовков CORS, если какая-либо политика завершается сбоем в потоке выполнения запроса API. Пользователи Edge Public Cloud
Несколько значений для Access-Control-Allow-Origin Использование «Добавить» вместо «Установить» в разделе «Назначить политику сообщений». Пользователи Edge Public Cloud

Причина: необработанная ошибка политики.

Диагностика

  1. Убедитесь, что проблема возникает только в том случае, если ожидается ответ, отличный от 2XX .
  2. В случае неудачных запросов убедитесь, что в потоке прокси-сервера присутствуют политики.
  3. Отследите запрос и проверьте, не происходит ли сбой политики с continueOnError="false" и не возникает ли ошибка.
    1. Если да, проверьте, была ли выполнена политика AssignMessage CORS в потоке ответов об ошибках.
    2. Если нет, то это причина этой проблемы.
      Это связано с тем, что при сбое какой-либо политики с элементом continueOnError="false" запрос попадает в поток ответа об ошибке. Если в потоке ответов об ошибках нет явной обработки ошибок, обратно отправляется ответ об ошибке по умолчанию, соответствующий политике. Этот ответ об ошибке не имеет заголовков CORS. В результате вызов API с интегрированного портала разработчика завершается с Unknown error .

На следующих снимках экрана показаны пример сообщения об ошибке и пример сообщения об успехе.

Пример сообщения об ошибке на интегрированном портале . Попробуйте эту панель API и в окне трассировки прокси:

пример сообщения об ошибке, нажмите, чтобы увеличить изображениепример сообщения об ошибке

Пример сообщения об успехе на интегрированном портале . Попробуйте эту панель API и в окне трассировки прокси:

пример сообщения об успехе, нажмите, чтобы увеличить изображениепример сообщения об успехе

Разрешение

  1. Вместо того, чтобы полагаться на сообщение об ошибке по умолчанию, необходимо реализовать правило ошибки для обработки ответа об ошибке. Включите политику AssignMessage CORS с соответствующими заголовками и вызовите ее в FaultRule .
  2. Иногда может оказаться невозможным определить правило неисправности для каждой неисправности; поэтому можно реализовать правило ошибки по умолчанию для выполнения политики AssignMessage 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 в сеансе трассировки .
  2. Заголовок Access-Control-Allow-Origin позволяет установить только одно значение. Установка более одного значения может вызвать проблему CORS, и портал разработчика не сможет предоставить какие-либо ответы.
  3. Если значение заголовка Access-Control-Allow-Origin в трассировке выглядит так:
    *,*
    это означает, что и целевой сервер, и политика AssignMessage CORS устанавливают его значение.
  4. Это может произойти, если пользователь использовал <Add> element для Access-Control-Allow-Origin в политике или сама серверная часть устанавливает несколько значений.

Пример Access-Control-Allow-Origin, равный *,* :

пример использования нескольких значений, нажмите, чтобы увеличить изображениепример использования нескольких значений

Пример Access-Control-Allow-Origin, равный * :

пример использования одного значения, нажмите, чтобы увеличить изображениепример использования одного значения

Пример использования <Add> :

пример использования «Добавить», нажмите, чтобы увеличить изображениепример использования добавления

Пример использования <Set> :

пример использования Set, нажмите, чтобы увеличить изображениепример использования Set

Разрешение

  1. Рекомендуемый подход — использовать <Set> element (вместо <Add> element ) для Access-Control-Allow-Origin, поскольку допускается только одно значение.
  2. Альтернативно, установите заголовок Access-Control-Allow-Origin только в одном месте; либо политика 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-прокси
  • Полная команда завитка, используемая для воспроизведения ошибки
  • Файл трассировки запросов API
  • Полный вывод ответа от целевого/внутреннего сервера вместе с размером полезной нагрузки.