Habilitar o CORS para um recurso da API REST - Amazon API Gateway

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Habilitar o CORS para um recurso da API REST

O compartilhamento de recursos entre origens (CORS) é um recurso de segurança de navegador que restringe as solicitações HTTP entre origens que são iniciadas em scripts em execução no navegador.

Determinar se deseja habilitar o suporte ao CORS

Uma solicitação HTTP entre origens é uma solicitação que é feita para:

  • Um domínio diferente (por exemplo, de example.com para amazondomains.com)

  • Um subdomínio diferente (por exemplo, de example.com para petstore.example.com)

  • Uma porta diferente (por exemplo, de example.com para example.com:10777)

  • Um protocolo diferente (por exemplo, de https://example.com para http://example.com)

Se você não conseguir acessar sua API e receber uma mensagem de erro contendo Cross-Origin Request Blocked, talvez seja necessário habilitar o CORS.

As solicitações HTTP entre origens podem ser divididas em dois tipos: solicitações simples e solicitações não simples.

Habilitar o CORS para uma solicitação simples

Uma solicitação HTTP será simples se todas as condições a seguir forem verdadeiras:

  • Ela é emitida em relação a um recurso de API que permite apenas solicitações POST, GET e HEAD.

  • Se for uma solicitação de método POST, deverá incluir um cabeçalho Origin.

  • O tipo de conteúdo da carga da solicitação é text/plain, multipart/form-data ou application/x-www-form-urlencoded.

  • A solicitação não contém cabeçalhos personalizados.

  • Quaisquer requisitos adicionais que estão listados na Documentação do Mozilla CORS para solicitações simples.

Para solicitações simples do método POST de origem cruzada, a resposta de seu recurso precisa incluir o cabeçalho Access-Control-Allow-Origin: '*' ou Access-Control-Allow-Origin:'origin'.

Todas as outras solicitações HTTP entre origens são solicitações não simples.

Habilitar o CORS para uma solicitação não simples

Se os recursos de sua API receberem solicitações não simples, você deverá habilitar o suporte CORS adicional, dependendo de seu tipo de integração.

Habilitar o CORS para integrações sem proxy

Para essas integrações, o protocolo CORS exige que o navegador envie uma solicitação de simulação ao servidor e aguarde a aprovação (ou uma solicitação de credenciais) do servidor antes de enviar a solicitação real. Você deve configurar sua API para enviar uma resposta apropriada à solicitação de simulação.

Como criar uma resposta de simulação:

  1. Crie um método OPTIONS com uma integração de simulação.

  2. Adicione os seguintes cabeçalhos de resposta à resposta do método 200:

    • Access-Control-Allow-Headers

    • Access-Control-Allow-Methods

    • Access-Control-Allow-Origin

  3. Insira valores para os cabeçalhos de resposta. Para possibilitar todas as origens, todos os métodos e cabeçalhos comuns, use os seguintes valores de cabeçalho:

    • Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'

    • Access-Control-Allow-Methods: '*'

    • Access-Control-Allow-Origin: '*'

Depois de criar a solicitação de simulação, você deve retornar o cabeçalho Access-Control-Allow-Origin: '*' ou Access-Control-Allow-Origin:'origin' para todos os métodos habilitados para CORS para pelo menos todas as 200 respostas.

Habilitando o CORS para integrações sem proxy usando o AWS Management Console

Você pode usar o AWS Management Console para habilitar o CORS. O API Gateway cria um método OPTIONS e tenta adiciona o cabeçalho Access-Control-Allow-Origin às respostas de integração de métodos existentes. Isso nem sempre funciona e, às vezes, você precisa modificar manualmente a resposta de integração para retornar o cabeçalho Access-Control-Allow-Origin de todos os métodos habilitados para CORS para pelo menos todas as 200 respostas.

Habilitar o suporte ao CORS para integrações de proxy

Para uma integração de proxy do Lambda ou integração de proxy HTTP, seu back-end é responsável por retornar os cabeçalhos Access-Control-Allow-OriginAccess-Control-Allow-Methods e Access-Control-Allow-Headers, porque uma integração de proxy não retorna uma resposta de integração.

As seguintes funções de exemplo do Lambda retornam os cabeçalhos de CORS necessários:

Node.js
export const handler = async (event) => { const response = { statusCode: 200, headers: { "Access-Control-Allow-Headers" : "Content-Type", "Access-Control-Allow-Origin": "https://www.example.com", "Access-Control-Allow-Methods": "OPTIONS,POST,GET" }, body: JSON.stringify('Hello from Lambda!'), }; return response; };
Python 3
import json def lambda_handler(event, context): return { 'statusCode': 200, 'headers': { 'Access-Control-Allow-Headers': 'Content-Type', 'Access-Control-Allow-Origin': 'https://www.example.com', 'Access-Control-Allow-Methods': 'OPTIONS,POST,GET' }, 'body': json.dumps('Hello from Lambda!') }