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 사용자 |
원인: 처리되지 않은 정책 오류
진단
2XX가 아닌 응답이 예상되는 경우에만 문제가 발생하는지 확인합니다.- 실패한 요청의 경우 프록시 흐름에 정책이 있는지 확인합니다.
-
요청을 추적하고 정책이 실패하고 오류를 발생시키는지 확인합니다.
continueOnError="false" - 예인 경우 오류 응답 흐름에서 AssignMessage CORS 정책이 실행되었는지 확인합니다.
- 아니라면 이 문제의 원인입니다.
이는continueOnError="false"요소가 있는 정책이 실패하면 요청이 오류 응답 흐름으로 들어가기 때문입니다. 오류 응답 흐름에 명시적인 오류 처리가 없으면 정책에 해당하는 기본 오류 응답이 다시 전송됩니다. 이 오류 응답에는 CORS 헤더가 없습니다. 따라서 통합 개발자 포털의 API 호출이Unknown error와 함께 실패합니다.
다음 스크린샷은 오류 메시지 예시와 성공 메시지 예시 를 보여줍니다.
통합 포털 API 사용해 보기 패널 및 프록시 추적 창의 오류 메시지 예시:
통합 포털 API 사용해 보기 패널 및 프록시 추적 창의 성공 메시지 예시:
해상도
- 기본 오류 메시지에 의존하는 대신 오류 응답을 처리하기 위해 오류 규칙을 구현해야 합니다. 적절한 헤더가 있는 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 요청의 추적 파일
- 페이로드 크기와 함께 대상/백엔드 서버의 응답 전체 출력