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

5 minuto de leitura
0

Recebo o erro “No ’Access-Control-Allow-Origin’ header is present on the requested resource” quando tento invocar minha API do Amazon API Gateway. Quero solucionar esse erro e outros erros de compartilhamento de recursos de origem cruzada (CORS) do API Gateway.

Breve descrição

Os erros de (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.

Observação: você deve configurar o CORS no nível do recurso. Use configurações de API Gateway ou integrações de back-end, como o AWS Lambda.

Resolução

Além do erro do CORS “No ‘Access-Control-Allow-Origin’ header present”, é possível usar o procedimento a seguir para solucionar todos os erros do CORS. Outros erros do CORS incluem Method not supported under Access-Control-Allow-Methods header e “No ‘Access-Control-Allow-Origin’ header present”.

O erro “No ‘Access-Control-Allow-Origin’ header present” pode ocorrer pelos seguintes motivos:

  • A API não está configurada com um método OPTIONS que retorna os cabeçalhos CORS necessários.
  • Outros tipos de método não foram configurados, como GET, PUT ou POST, 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.
  • Para APIs REST privadas, o URL de invocação incorreto é chamado. Ou o tráfego não é roteado para o endpoint de nuvem privada virtual (VPC) da interface.

Confirme a causa do erro

Execute a seguinte ação:

  • Ao invocar sua API, crie um arquivo HTTP Archive (HAR). Em seguida, verifique os cabeçalhos dos parâmetros que são retornados na resposta da API para confirmar a causa do erro do arquivo.
  • 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.

Configurar o CORS no recurso de API que falhou

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 Configurar CORS para APIs HTTP no API Gateway.

Ao configurar o CORS em seu recurso de API, selecione as seguintes opções:

Para respostas do Gateway, selecione DEFAULT 4XX e DEFAULT 5XX. Quando você seleciona DEFAULT 4XX e DEFAULT 5XX, 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 “Missing Authentication Token”.

Para Access-Control-Allow-Methods, se OPTIONS ainda não estiver selecionado, selecione-o e todos os outros métodos disponíveis para solicitações CORS, como GET, PUT e POST. O console do API Gateway configura a resposta 200 do método OPTIONS com os cabeçalhos Access-Control-Allow necessários e substitui os valores existentes no recurso reconfigurado.

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

Para retornar os cabeçalhos CORS necessários em sua resposta, configure sua função do Lambda de backend ou servidor de proxy HTTP. Você deve incluir domínios permitidos no valor do cabeçalho Access-Control-Allow-Origin como uma lista.

Para integrações de proxy, não é possível 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 sem proxy, deverá configurar manualmente uma resposta de integração no API Gateway para retornar os cabeçalhos CORS necessários. Use o console do API Gateway para configurar o CORS. O console adiciona automaticamente os cabeçalhos CORS necessários ao recurso configurado.

(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.

O DNS privado está ativado

Use o nome DNS privado para invocar sua API privada de dentro da sua Amazon Virtual Private Cloud (Amazon VPC).

O DNS privado não está ativado

Você deverá rotear manualmente o tráfego do URL de invocação até os endereços IP do endpoint da VPC. Use o seguinte URL de invocação (alias Amazon Route 53):

https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}

Observação: substitua rest-api-id, region, vpce-id e stage pelos valores da sua API.

Se o DNS privado não estiver ativado, não será possível usar nomes de DNS públicos específicos do endpoint para acessar sua API privada de dentro da 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.

Para APIs privadas, 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.

Observação: certifique-se de que a autorização esteja desativada no método OPTIONS da sua API.

Informações relacionadas

Teste o CORS para uma API do API Gateway

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