Solução de problemas do CORS - Amazon Simple Storage Service

Solução de problemas do CORS

Os tópicos a seguir podem ajudar a solucionar alguns problemas comuns do CORS relacionados ao S3.

403 Erro proibido: o CORS não está habilitado para este bucket.

O erro 403 Forbidden a seguir ocorre quando uma solicitação de origem cruzada é enviada ao Amazon S3, mas o CORS não está configurado no bucket do S3.

Erro: HTTP/1.1 403 Resposta proibida do CORS: o CORS não está habilitado para esse bucket.

A configuração do CORS é um documento ou uma política com regras que identificam as origens que você permitirá que acessem o bucket, as operações (métodos HTTP) compatíveis com cada origem e outras informações específicas da operação. Veja como configurar o CORS no S3 usando o console do Amazon S3, AWS SDKs e a API REST. Para ter mais informações sobre o CORS e exemplos da configuração correspondente, consulte Elementos do CORS.

403 Erro proibido: essa solicitação do CORS não é permitida.

O erro 403 Forbidden a seguir é recebido quando uma regra do CORS na configuração correspondente não coincide com os dados da sua solicitação.

Erro: HTTP/1.1 403 Resposta proibida do CORS: essa solicitação do CORS não é permitida.

Como resultado, esse erro 403 Forbidden pode ocorrer por vários motivos:

  • A origem não é permitida.

  • Métodos não são permitidos.

  • Cabeçalhos solicitados não são permitidos.

Para cada solicitação que o Amazon S3 recebe, é necessário ter uma regra do CORS na configuração correspondente que coincida com os dados na solicitação.

A origem não é permitida

O cabeçalho Origin em uma solicitação do CORS para seu bucket deve corresponder às origens do elemento AllowedOrigins na configuração do CORS. Um caractere curinga ("*") no elemento AllowedOrigins corresponderia a todos os métodos HTTP. Para ter mais informações sobre como atualizar o elemento AllowedOrigins, consulte Configurar o compartilhamento de recursos de origem cruzada (CORS).

Por exemplo, se somente o domínio http://www.example1.com estiver incluído no elemento AllowedOrigins, uma solicitação do CORS enviada do domínio http://www.example2.com receberá o erro 403 Forbidden.

O exemplo a seguir mostra parte de uma configuração do CORS que inclui o domínio http://www.example1.com no elemento AllowedOrigins.

"AllowedOrigins":[ "http://www.example1.com" ]

Para que uma solicitação do CORS enviada do domínio http://www.example2.com seja bem-sucedida, o domínio http://www.example2.com deve ser incluído no elemento AllowedOrigins da configuração do CORS.

"AllowedOrigins":[ "http://www.example1.com" "http://www.example2.com" ]

Métodos não são permitidos

Os métodos HTTP especificados no Access-Control-Request-Method em uma solicitação de CORS para o bucket devem corresponder ao método ou aos métodos listados no elemento AllowedMethods na configuração de CORS. Um caractere curinga ("*") em AllowedMethods corresponderia a todos os métodos HTTP. Para ter mais informações sobre como atualizar o elemento AllowedOrigins, consulte Configurar o compartilhamento de recursos de origem cruzada (CORS).

Na configuração do CORS, é possível especificar os seguintes métodos para o elemento AllowedMethods:

  • GET

  • PUT

  • POST

  • DELETE

  • HEAD

O exemplo a seguir mostra parte de uma configuração do CORS que inclui o método GET no elemento AllowedMethods. Somente solicitações que incluíssem o método GET seriam bem-sucedidas.

"AllowedMethods":[ "GET" ]

Se um método HTTP (por exemplo, PUT) fosse usado em uma solicitação do CORS ou incluído em uma solicitação de pré-processamento do CORS no bucket, mas o método não estivesse presente na configuração do CORS, a solicitação geraria um erro 403 Forbidden. Para permitir essa solicitação do CORS ou a solicitação de pré-processamento do CORS, o método PUT deve ser adicionado à sua configuração do CORS.

"AllowedMethods":[ "GET" "PUT" ]

Cabeçalhos solicitados não são permitidos

Os cabeçalhos listados no cabeçalho Access-Control-Request-Headers em uma solicitação de pré-processamento devem corresponder aos cabeçalhos no elemento AllowedHeaders na configuração do CORS. Para ver uma lista de cabeçalhos comuns que podem ser usados em solicitações ao Amazon S3, consulte Common Request Headers. Para ter mais informações sobre como atualizar o elemento AllowedHeaders, consulte Configurar o compartilhamento de recursos de origem cruzada (CORS).

O exemplo a seguir mostra parte de uma configuração do CORS que inclui o cabeçalho Authorization no elemento AllowedHeaders. Somente solicitações para o cabeçalho Authorization seriam bem-sucedidas.

"AllowedHeaders": [ "Authorization" ]

Se um cabeçalho, por exemplo, Content-MD5, fosse incluído em uma solicitação do CORS, mas o cabeçalho não estivesse presente na configuração correspondente, a solicitação geraria um erro 403 Forbidden. Para permitir essa solicitação do CORS, o cabeçalho Content-MD5 deve ser adicionado à sua configuração do CORS. Se você quiser transmitir os cabeçalhos Authorization e Content-MD5 em uma solicitação do CORS para o bucket, confirme se os dois cabeçalhos estão incluídos no elemento AllowedHeaders em sua configuração do CORS.

"AllowedHeaders": [ "Authorization" "Content-MD5" ]

Cabeçalhos não encontrados na resposta do CORS

O elemento ExposeHeaders na configuração do CORS identifica quais cabeçalhos de resposta você gostaria de tornar acessíveis aos scripts e às aplicações executados em navegadores, em resposta a uma solicitação do CORS.

Se os objetos armazenados no bucket do S3 tiverem metadados definidos pelo usuário (por exemplo, x-amz-meta-custom-header) além dos dados de resposta, esse cabeçalho personalizado poderá conter metadados ou informações adicionais a serem acessados do código JavaScript do lado do cliente. No entanto, por padrão, os navegadores bloqueiam o acesso a cabeçalhos personalizados por motivos de segurança. Para permitir que o JavaScript do lado do cliente acesse cabeçalhos personalizados, é necessário incluir o cabeçalho na configuração do CORS.

No exemplo abaixo, o cabeçalho x-amz-meta-custom-header1 está incluído no elemento ExposeHeaders. O x-amz-meta-custom-header2 não está incluído no elemento ExposeHeaders e não está presente na configuração do CORS. Na resposta, somente os valores incluídos no elemento ExposeHeaders seriam exibidos. Se a solicitação incluísse o cabeçalho x-amz-meta-custom-header2 no cabeçalho Access-Control-Expose-Headers, a resposta ainda exibiria 200 OK. No entanto, somente o cabeçalho permitido, por exemplo, x-amz-meta-custom-header, seria exibido na resposta.

"ExposeHeaders": [ "x-amz-meta-custom-header1" ]

Para garantir que todos os cabeçalhos apareçam na resposta, adicione todos os cabeçalhos permitidos ao elemento ExposeHeaders na configuração do CORS, conforme mostrado abaixo.

"ExposeHeaders": [ "x-amz-meta-custom-header1", "x-amz-meta-custom-header2" ]

Considerações sobre o CORS nas integrações de proxy do S3

Se você estiver enfrentando erros e já tiver conferido a configuração do CORS no bucket do S3, e a solicitação de origem cruzada for enviada para proxies, como o AWS CloudFront, tente o seguinte:

  • Defina as configurações para permitir o método OPTIONS para solicitações HTTP.

  • Configure o proxy para encaminhar os seguintes cabeçalhos: Origin, Access-Control-Request-Headers e Access-Control-Request-Method.

Alguns proxies fornecem recursos predefinidos para solicitações do CORS. Por exemplo, no CloudFront, é possível configurar uma política que inclua os cabeçalhos que permitem solicitações do CORS quando a origem é um bucket do S3. Para ter mais informações, consulte Controlar as solicitações de origem com uma política ou Usar políticas de solicitação de origem gerenciadas no Guia do desenvolvedor do CloudFront.