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.

개발자 도구 > 콘솔 탭에 표시되는 일반적인 오류 메시지는 다음과 같습니다.

일반 오류 메시지, 더 큰 이미지를 보려면 클릭하세요. 일반 오류 메시지

가능한 원인

원인 설명 다음에 관한 문제 해결 안내
처리되지 않은 정책 오류 API 요청의 런타임 흐름에서 정책이 실패하면 기본 오류 응답이 CORS 헤더 없이 전송됩니다. Edge 퍼블릭 클라우드 사용자
Access-Control-Allow-Origin의 여러 값 메시지 정책 할당에서 설정 대신 추가를 사용합니다. Edge 퍼블릭 클라우드 사용자

원인: 처리되지 않은 정책 오류

진단

  1. 2XX 외의 응답이 예상되는 경우에만 문제가 발생하는지 확인합니다.
  2. 실패한 요청의 경우 프록시 흐름에 정책이 있는지 확인합니다.
  3. 요청을 추적하고 continueOnError="false"가 포함된 정책이 실패하여 오류를 일으키는지 확인합니다.
    1. 그렇다면 오류 응답 흐름에서 AssignMessage CORS 정책이 실행되었는지 여부를 확인합니다.
    2. 그렇지 않은 경우 이로 인해 문제가 발생합니다.
      이는 continueOnError="false" 요소가 있는 정책이 실패하면 요청이 오류 응답 흐름으로 들어가기 때문입니다. 오류 응답 흐름에 명시적인 오류 처리가 없으면 정책에 해당하는 기본 오류 응답이 다시 전송됩니다. 이 오류 응답에 CORS 헤더가 없습니다. 따라서 통합된 개발자 포털의 API 호출이 Unknown error와 함께 실패합니다.

다음 스크린샷은 오류 메시지 예와 성공 메시지 예를 보여줍니다.

통합 포털 API 사용해 보기 패널 및 프록시 Trace 창에 표시되는 오류 메시지 예:

오류 메시지 예시, 더 큰 이미지를 보려면 클릭하세요. 오류 메시지 예시

통합된 포털 API 사용해 보기 패널 및 프록시 Trace 창에 표시되는 성공 메시지 예:

성공 메시지 예시, 클릭하여 더 큰 이미지 보기 성공 메시지 예시

해상도

  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. 이 문제는 사용자가 정책에서 Access-Control-Allow-Origin <Add> element를 사용했거나 백엔드 자체에서 여러 값을 설정하는 경우에 발생할 수 있습니다.

*,*와 같은 Access-Control-Allow-Origin의 예:

여러 값이 사용된 예(더 큰 이미지를 보려면 클릭하세요.) 여러 값이 사용된 예

*와 같은 Access-Control-Allow-Origin의 예:

사용된 단일 값의 예, 더 큰 이미지를 보려면 클릭하세요. 사용된 단일 값의 예

<Add> 사용 예시:

&#39;추가&#39;를 사용한 예, 더 큰 이미지를 보려면 클릭하세요. Add 사용 예

<Set> 사용 예시:

설정 사용의 예, 더 큰 이미지를 보려면 클릭하세요. Set 사용 예시

해상도

  1. 단일 값만 허용되므로 Access-Control-Allow-Origin <Add> element 대신 <Set> element를 사용하는 것이 좋습니다.
  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 프록시 이름
  • 오류를 재현하는 데 사용된 전체 curl 명령어
  • API 요청에 대한 추적 파일
  • 페이로드의 크기와 함께 대상/백엔드 서버의 응답을 빠짐없이 출력