Você está vendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X. informações
Sintoma
A chamada de API do portal do desenvolvedor integrado falha com
Unknown Error
ou com uma resposta vazia no painel
Testar esta API.
Mensagens de erro
Talvez você veja uma resposta vazia ou a seguinte mensagem de erro para as solicitações de API no portal integrado:
Unknown Error
Na guia Ferramentas para desenvolvedores > Console, você verá o seguinte erro:
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.
Uma mensagem de erro genérica, como vista na guia Ferramentas para desenvolvedores > Console, é esta:
Causas possíveis
Causa | Descrição | Instruções de solução de problemas aplicáveis para |
---|---|---|
Falha de política não tratada | A resposta de erro padrão é enviada sem cabeçalhos CORS quando qualquer política falha no fluxo de tempo de execução da solicitação de API. | Usuários da nuvem pública de borda |
Vários valores para Access-Control-Allow-Origin | Usar "Adicionar" em vez de "Definir" em "Atribuir política de mensagem". | Usuários da nuvem pública de borda |
Causa: falha de política não tratada
Diagnóstico
- Verifique se o problema ocorre apenas se uma resposta diferente de
2XX
for esperada. - Para solicitações com falha, verifique se há políticas no fluxo do proxy.
-
Trace a solicitação e verifique se uma política com
continueOnError="false"
está falhando e gerando falhas. - Em caso afirmativo, verifique se a política de CORS doAssignMessage foi executada ou não no fluxo de resposta de erro.
- Se não, essa é a causa do problema.
Isso ocorre porque, quando qualquer política com o elementocontinueOnError="false"
falha, a solicitação entra no fluxo de resposta de erro. Se não houver um tratamento de falhas explícito no fluxo de resposta de erro, a resposta de erro padrão correspondente à política será enviada de volta. Esta resposta de erro não tem cabeçalhos CORS. Como resultado, a chamada de API do portal do desenvolvedor integrado falha comUnknown error
.
As capturas de tela a seguir exibem um exemplo de mensagem de erro e um exemplo de mensagem de sucesso.
Exemplo de mensagem de erro no painel integrado Testar esta API e na janela Trace do proxy:
Exemplo de mensagem de sucesso no painel integrado Testar esta API e na janela Trace do proxy:
Resolução
- Em vez de depender da mensagem de erro padrão, é necessário implementar uma regra de falha para processar a resposta de erro. Inclua uma política de CORS do AttributionMessage com os cabeçalhos apropriados e invoque-a em FaultRule.
- Às vezes, pode não ser viável ter uma regra de falha definida para cada falha. Portanto, é possível implementar uma regra de falha padrão para executar a política de CORS doAssignMessage:
<?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>
Causa: diversos valores para Access-Control-Allow-Origin
Diagnóstico
- Verifique o valor do cabeçalho Access-Control-Allow-Origin em uma sessão de rastreamento.
- O cabeçalho Access-Control-Allow-Origin permite que apenas um valor seja definido. Definir mais de um valor pode causar um problema de CORS, e o portal do desenvolvedor não renderizará nenhuma resposta.
- Se o valor do cabeçalho Access-Control-Allow-Origin no trace tiver esta aparência:
*,*
isso significa que o servidor de destino e a política de CORS do AttributionMessage estão definindo o valor dele. - Isso pode acontecer quando um usuário usa o
<Add> element
para Access-Control-Allow-Origin em uma política ou quando o próprio back-end está definindo vários valores.
Exemplo de Access-Control-Allow-Origin igual a *,*
:
Exemplo de Access-Control-Allow-Origin igual a *
:
Exemplo usando <Add>
:
Exemplo usando <Set>
:
Resolução
- A abordagem recomendada é usar o
<Set> element
(em vez de<Add> element
) para Access-Control-Allow-Origin, já que apenas um valor é permitido. - Outra opção é definir o cabeçalho Access-Control-Allow-Origin em apenas um lugar: na política de CORS doAssignMessage ou no servidor de destino.
<?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>
Se você ainda precisar de ajuda do suporte da Apigee, acesse Precisamos coletar informações de diagnóstico.
É necessário coletar informações de diagnóstico
Reúna as seguintes informações de diagnóstico e entre em contato com o suporte do Apigee Edge:
- Nome da organização
- Nome do ambiente
- Nome do proxy de API
- Comando curl completo usado para reproduzir o erro
- Arquivo de rastreamento das solicitações de API
- Saída completa da resposta do servidor de destino/back-end junto com o tamanho do payload