Você está lendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X.info
Sintoma
A chamada de API do portal do desenvolvedor integrado falha com
Unknown Error ou uma resposta vazia no
painel "Testar esta API".
Mensagens de erro
Você pode encontrar 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, conforme mostrado na guia "Ferramentas para desenvolvedores > Console", é a seguinte:
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 execução da solicitação de API. | Usuários da nuvem pública do Edge |
| Vários valores para Access-Control-Allow-Origin | Usar "Adicionar" em vez de "Definir" na política de mensagens de atribuição. | Usuários da nuvem pública do Edge |
Causa: falha de política não tratada
Diagnóstico
- Verifique se o problema ocorre apenas quando uma resposta não
2XXé esperada. - Para solicitações com falha, verifique se há políticas no fluxo de proxy.
-
Rastreie a solicitação e verifique se uma política com
continueOnError="false"está falhando e gerando falha. - Em caso afirmativo, verifique se a política CORS AssignMessage foi executada ou não no fluxo de resposta de erro.
- Caso contrário, 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 tratamento de falhas explícito no fluxo de resposta de erro, a resposta de erro padrão correspondente à política será enviada de volta. Essa resposta de erro não tem cabeçalhos CORS. Como resultado, a chamada de API do portal de desenvolvedores integrado falha comUnknown error.
As capturas de tela a seguir mostram uma mensagem de erro de exemplo e uma mensagem de sucesso de exemplo.
Exemplo de mensagem de erro no painel Testar esta API do portal integrado e na janela Trace do proxy:
Exemplo de mensagem de sucesso no painel Testar esta API do portal integrado e na janela Trace do proxy:
Resolução
- Em vez de depender da mensagem de erro padrão, uma regra de falha precisa ser implementada para processar a resposta de erro. Inclua uma política CORS AssignMessage com cabeçalhos apropriados e invoque-a na FaultRule.
- Às vezes, pode não ser possível definir uma regra de falha para cada falha. Portanto, uma regra de falha padrão pode ser implementada para executar a política CORS AssignMessage:
<?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: vários 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. A definição de mais de um valor pode causar um problema de CORS, e o portal do desenvolvedor não vai renderizar nenhuma resposta.
- Se o valor do cabeçalho Access-Control-Allow-Origin no rastreamento
for semelhante a:
*,*isso significa que o servidor de destino e a política CORS AssignMessage estão definindo o valor. - Isso pode acontecer quando um usuário usa o
<Add> elementpara 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 de uso de <Add>:
Exemplo de uso de <Set>:
Resolução
- A abordagem recomendada é usar o
<Set> element(em vez do<Add> element) para Access-Control-Allow-Origin , já que apenas um único valor é permitido. - Como alternativa, defina o cabeçalho Access-Control-Allow-Origin em apenas um lugar: a política CORS AssignMessage ou o 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 É necessário 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 para as solicitações de API
- Saída completa da resposta do servidor de destino/back-end, juntamente com o tamanho do payload