API 사용해 보기 패널의 알 수 없는 오류

Apigee Edge 문서입니다.
Go to the Apigee X 문서로 이동합니다.
info

증상

통합 개발자 포털의 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 Public Cloud 사용자
Access-Control-Allow-Origin의 여러 값 메시지 할당 정책에서 Set 대신 Add를 사용합니다. 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. 이는 사용자가 정책에서 Access-Control-Allow-Origin <Add> element를 사용했거나 백엔드 자체에서 여러 값을 설정하는 경우에 발생할 수 있습니다.

Access-Control-Allow-Origin*,*인 예시:

사용된 여러 값의 예, 큰 이미지를 보려면 클릭 사용된 여러 값의 예

Access-Control-Allow-Origin*인 예시:

사용된 단일 값의 예, 큰 이미지를 보려면 클릭 사용된 단일 값의 예

<Add>를 사용하는 예시:

추가 사용 예시, 큰 이미지를 보려면 클릭 추가 사용 예

<Set>을 사용하는 예시:

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 요청의 추적 파일
  • 페이로드 크기와 함께 대상/백엔드 서버의 응답 전체 출력