현재 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 퍼블릭 클라우드 사용자 |
원인: 처리되지 않은 정책 오류
진단
2XX
외의 응답이 예상되는 경우에만 문제가 발생하는지 확인합니다.- 실패한 요청의 경우 프록시 흐름에 정책이 있는지 확인합니다.
-
요청을 추적하고
continueOnError="false"
가 포함된 정책이 실패하여 오류를 일으키는지 확인합니다. - 그렇다면 오류 응답 흐름에서 AssignMessage CORS 정책이 실행되었는지 여부를 확인합니다.
- 그렇지 않은 경우 이로 인해 문제가 발생합니다.
이는continueOnError="false"
요소가 있는 정책이 실패하면 요청이 오류 응답 흐름으로 들어가기 때문입니다. 오류 응답 흐름에 명시적인 오류 처리가 없으면 정책에 해당하는 기본 오류 응답이 다시 전송됩니다. 이 오류 응답에 CORS 헤더가 없습니다. 따라서 통합된 개발자 포털의 API 호출이Unknown error
와 함께 실패합니다.
다음 스크린샷은 오류 메시지 예와 성공 메시지 예를 보여줍니다.
통합 포털 API 사용해 보기 패널 및 프록시 Trace 창에 표시되는 오류 메시지 예:
통합된 포털 API 사용해 보기 패널 및 프록시 Trace 창에 표시되는 성공 메시지 예:
해상도
- 기본 오류 메시지를 사용하는 대신 오류 규칙을 구현하여 오류 응답을 처리해야 합니다. 적절한 헤더가 있는 AssignMessage CORS 정책을 포함하고 FaultRule에서 이를 호출합니다.
- 각 오류에 대해 오류 규칙을 정의하는 것이 불가능한 경우도 있습니다. 따라서 기본 오류 규칙을 구현하여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에 여러 값이 있음
진단
- 추적 세션에서 Access-Control-Allow-Origin 헤더의 값을 확인합니다.
- Access-Control-Allow-Origin 헤더는 하나의 값만 설정할 수 있습니다. 값을 두 개 이상 설정하면 CORS 문제가 발생할 수 있으며 개발자 포털에서 응답을 렌더링하지 못합니다.
- 트레이스에 있는 Access-Control-Allow-Origin 헤더의 값이
*,*
과 같은 경우, 대상 서버와AssignMessage CORS 정책이 모두 값을 설정하고 있음을 의미합니다. - 이 문제는 사용자가 정책에서 Access-Control-Allow-Origin에
<Add> element
를 사용했거나 백엔드 자체에서 여러 값을 설정하는 경우에 발생할 수 있습니다.
*,*
와 같은 Access-Control-Allow-Origin의 예:
*
와 같은 Access-Control-Allow-Origin의 예:
<Add>
사용 예시:
<Set>
사용 예시:
해상도
- 단일 값만 허용되므로 Access-Control-Allow-Origin에
<Add> element
대신<Set> element
를 사용하는 것이 좋습니다. - 또는 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 요청에 대한 추적 파일
- 페이로드의 크기와 함께 대상/백엔드 서버의 응답을 빠짐없이 출력