Solução de problemas do CORS
Os tópicos a seguir podem ajudar a solucionar alguns problemas comuns do CORS relacionados ao S3.
Tópicos
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
eAccess-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.