Como solucionar erros de CORS da minha API do API Gateway?

6 minuto de leitura
0

Recebo o erro “Nenhum cabeçalho 'Access-Control-Allow-Origin' está presente no recurso solicitado” quando tento invocar minha API do Amazon API Gateway. Quero solucionar esse erro e outros erros de CORS do API Gateway.

Breve descrição

Erros de compartilhamento de recursos entre origens (CORS) ocorrem quando um servidor não retorna os cabeçalhos HTTP exigidos pelo padrão CORS. Para resolver um erro de CORS em uma API REST do API Gateway ou API HTTP, você deve reconfigurar a API para atender ao padrão CORS.

Para obter mais informações sobre como configurar o CORS para APIs REST, consulte Ativar o CORS para um recurso da API REST. Para APIs HTTP, consulte Configure o CORS para uma API HTTP.

Observação: o CORS deve ser configurado no nível do recurso e pode ser manipulado usando configurações do API Gateway ou integrações de backend, como o AWS Lambda.

Resolução

O procedimento de exemplo a seguir mostra como solucionar o erro de CORS Nenhum cabeçalho “Access-Control-Allow-Origin” presente. No entanto, você pode usar um procedimento semelhante para solucionar todos os erros de CORS. Por exemplo: erros de Método sem suporte no cabeçalho Access-Control-Allow-Methods e erros de Nenhum cabeçalho “Access-Control-Allow-Headers” presente.

Observação: o erro de Nenhum cabeçalho “Access-Control-Allow-Origin” presente pode ocorrer por qualquer um dos seguintes motivos:

  • A API não está configurada com um método OPTIONS que retorna os cabeçalhos CORS necessários.
  • Outro tipo de método (como GET, PUT ou POST) não está configurado para retornar os cabeçalhos CORS necessários.
  • Uma API com integração de proxy ou integração sem proxy não está configurada para retornar os cabeçalhos CORS necessários.
  • (Somente para APIs REST privadas) O URL de invocação incorreto é chamado, ou o tráfego não está sendo roteado ao endpoint da nuvem privada virtual (VPC) da interface.

Confirme a causa do erro

Existem duas maneiras de confirmar a causa de um erro de CORS no API Gateway:

  • Crie um arquivo HTTP (HAR) ao invocar sua API. Em seguida, confirme a causa do erro no arquivo, verificando os cabeçalhos nos parâmetros retornados na resposta da API.
    -ou-
  • Use as ferramentas do desenvolvedor no seu navegador para verificar os parâmetros da solicitação e da resposta da solicitação de API com falha.

Configure o CORS no recurso de API que está apresentando o erro

Para APIs REST

Siga as instruções para Ativar o CORS em um recurso usando o console do API Gateway.

Para APIs HTTP

Siga as instruções em Como configurar o CORS para uma API HTTP.

Importante: se você configurar o CORS para uma API HTTP, o API Gateway enviará automaticamente uma resposta a solicitações OPTIONS de simulação. Essa resposta será enviada mesmo que não haja uma rota OPTIONS configurada para a sua API. Para uma solicitação CORS, o API Gateway adiciona os cabeçalhos CORS configurados à resposta de uma integração.

Ao configurar o CORS no seu recurso de API, certifique-se de fazer o seguinte:

  • Em Respostas do gateway para <api-name> API, escolha as caixas de seleção DEFAULT 4XX e DEFAULT 5XX.

Observação: quando você seleciona essas opções padrão, o API Gateway responde com os cabeçalhos CORS necessários, mesmo quando uma solicitação não chega ao endpoint. Por exemplo, se uma solicitação incluir um caminho de recurso incorreto, o API Gateway ainda responderá com um o erro 403 “Token de autenticação ausente”.

  • Para Métodos, marque a caixa de seleção do método OPTIONS se ela ainda não estiver marcada. Além disso, marque as caixas de seleção para todos os outros métodos disponíveis para solicitações CORS. Por exemplo: GET, PUT e POST.

Observação: a configuração do CORS no console do API Gateway adiciona um método OPTIONS ao recurso, caso ainda não exista. Ela também configura a resposta 200 do método OPTIONS com os cabeçalhos Access-Control-Allow-* necessários. Se você já configurou o CORS usando o console, configurá-lo novamente substituirá todos os valores existentes.

Configure as integrações da API REST para retornar os cabeçalhos CORS necessários

Configure sua função do AWS Lambda de backend ou o servidor HTTP para enviar os cabeçalhos CORS necessários em sua resposta. Lembre-se:

  • Os domínios permitidos devem estar incluídos no valor do cabeçalho Access-Control-Allow-Origin como uma lista.
  • Para integrações de proxy, você não pode configurar uma resposta de integração no API Gateway para modificar os parâmetros de resposta retornados pelo backend da sua API. Em uma integração de proxy, o API Gateway encaminha a resposta do backend diretamente ao cliente.
  • Se você usar uma integração não proxy, deverá configurar manualmente uma resposta de integração no API Gateway para retornar os cabeçalhos CORS necessários.

Observação: para APIs com uma integração não proxy, configurar o CORS em um recurso usando o console do API Gateway adiciona automaticamente os cabeçalhos CORS necessários a esse recurso.

(Somente para APIs REST privadas) Verificar a configuração de DNS privado do endpoint da interface

Para APIs REST privadas, determine se o DNS privado está ativado no endpoint da VPC da interface associado.

Se o DNS privado estiver ativado

Certifique-se de invocar sua API privada de dentro da Amazon Virtual Private Cloud (Amazon VPC) usando o nome do DNS privado.

Se o DNS privado não estiver ativado

Você deverá rotear manualmente o tráfego do URL de invocação até os endereços IP do endpoint da VPC.

Observação: você deve usar o seguinte URL de invocação, independentemente de o DNS privado estar ativado ou não:

https://api-id.execute-api.region.amazonaws.com/stage-name

Certifique-se de substituir os valores de api-id, region e stage-name pelos valores necessários para a sua API. Para obter mais informações, consulte Como invocar uma API privada.

Importante: se o CORS estiver configurado quando o DNS privado não estiver ativado, lembre-se das seguintes limitações:

  • Não é possível usar nomes de DNS públicos específicos do endpoint para acessar sua API privada de dentro da Amazon VPC.
  • Não é possível usar a opção de cabeçalho Host, pois as solicitações de um navegador não permitem a manipulação do cabeçalho Host.
  • Não é possível usar o cabeçalho personalizado x-apigw-api-id, pois ele inicia uma solicitação OPTIONS de simulação que não inclui o cabeçalho. As chamadas de API que usam o cabeçalho x-apigw-api-id não chegarão à API.

Informações relacionadas

Testar o CORS

Ative o CORS em um recurso usando a API de importação do API Gateway