Solución de problemas de CORS
Los siguientes temas pueden ayudarle a solucionar problemas habituales de CORS relacionados con S3.
Temas
Error 403 Forbidden: CORS is not enabled for this bucket
El siguiente error 403 Forbidden
se produce cuando se envía una solicitud entre orígenes a Amazon S3, pero CORS no está configurado en el bucket de S3.
Error: HTTP/1.1 403 Forbidden CORS Response: CORS is not enabled for this bucket.
La configuración de CORS es un documento o política con reglas que identifican los orígenes desde los que se permitirá el acceso al bucket, las operaciones (métodos HTTP) que permitirá para cada origen y otro tipo de información específica de cada operación. Descubra cómo configurar CORS en S3 utilizando la consola de Amazon S3, los AWS SDK y la API de REST. Para obtener más información sobre CORS y ejemplos de una configuración de CORS, consulte Elementos de CORS.
Error 403 Forbidden: This CORS request is not allowed
Se recibe el siguiente error 403 Forbidden
cuando una regla de CORS de la configuración de CORS no se corresponde con los datos de la solicitud.
Error: HTTP/1.1 403 Forbidden CORS Response: This CORS request is not allowed.
Como resultado, este error 403 Forbidden
puede producirse por varios motivos:
-
El origen no está permitido.
-
Los métodos no están permitidos.
-
Los encabezados solicitados no están permitidos.
Para cada solicitud que Amazon S3 reciba, debe tener una regla de CORS en la configuración de CORS que se corresponda con los datos de la solicitud.
El origen no está permitido
El encabezado Origin
de una solicitud de CORS a su bucket debe corresponderse con los orígenes del elemento AllowedOrigins
de su configuración de CORS. Un carácter comodín ("*"
) en el elemento AllowedOrigins
se correspondería con todos los métodos HTTP. Para obtener más información sobre cómo actualizar el elemento AllowedOrigins
, consulte Configuración del uso compartido de recursos entre orígenes (CORS).
Por ejemplo, si solo se incluye el dominio http://www.example1.com
en el elemento AllowedOrigins
, una solicitud de CORS enviada desde el dominio http://www.example2.com
recibirá el error 403
Forbidden
.
El siguiente ejemplo muestra parte de una configuración de CORS que incluye el dominio http://www.example1.com
en el elemento AllowedOrigins
.
"AllowedOrigins":[ "http://www.example1.com" ]
Para que una solicitud de CORS enviada desde el dominio http://www.example2.com
se realice correctamente, el dominio http://www.example2.com
debe incluirse en el elemento AllowedOrigins
de la configuración de CORS.
"AllowedOrigins":[ "http://www.example1.com" "http://www.example2.com" ]
Los métodos no están permitidos
Los métodos HTTP que se especifiquen en el Access-Control-Request-Method
en una solicitud de CORS a su bucket deben corresponderse con el método o métodos enumerados en el elemento AllowedMethods
de su configuración de CORS. Un carácter comodín ("*"
) en AllowedMethods
se correspondería con todos los métodos HTTP. Para obtener más información sobre cómo actualizar el elemento AllowedOrigins
, consulte Configuración del uso compartido de recursos entre orígenes (CORS).
En una configuración de CORS, puede especificar los siguientes métodos en el elemento AllowedMethods
:
-
GET
-
PUT
POST
-
DELETE
-
HEAD
El siguiente ejemplo muestra parte de una configuración de CORS que incluye el método GET
en el elemento AllowedMethods
. Solo se aceptarán las solicitudes que incluyan el método GET
.
"AllowedMethods":[ "GET" ]
Si se utilizó un método HTTP (por ejemplo, PUT
) en una solicitud de CORS o se incluyó en una solicitud de CORS anterior al tránsito en su bucket, pero el método no está presente en la configuración de CORS, la solicitud dará lugar a un error 403 Forbidden
. Para permitir esta solicitud de CORS o una solicitud de CORS anterior al tránsito, debe agregar el método PUT
a su configuración de CORS.
"AllowedMethods":[ "GET" "PUT" ]
Los encabezados solicitados no están permitidos
Los encabezados que aparecen en el encabezado Access-Control-Request-Headers
de una solicitud anterior al tránsito deben corresponderse con los encabezados del elemento AllowedHeaders
de la configuración de CORS. Para obtener una lista de los encabezados comunes que pueden utilizarse en las solicitudes a Amazon S3, consulte Common Request Headers. Para obtener más información sobre cómo actualizar el elemento AllowedHeaders
, consulte Configuración del uso compartido de recursos entre orígenes (CORS).
El siguiente ejemplo muestra parte de una configuración de CORS que incluye el encabezado Authorization
en el elemento AllowedHeaders
. Solo se aceptarían solicitudes del encabezado Authorization
.
"AllowedHeaders": [ "Authorization" ]
Si se incluyó un encabezado (por ejemplo, Content-MD5
) en una solicitud de CORS, pero el encabezado no está presente en la configuración de CORS, la solicitud dará lugar a un error 403 Forbidden
. Para permitir esta solicitud de CORS, se debe agregar el encabezado Content-MD5
a la configuración de CORS. Si quiere pasar los dos encabezados, Authorization
y Content-MD5
, de una solicitud de CORS a su bucket, confirme que ambos estén incluidos en el elemento AllowedHeaders
de su configuración de CORS.
"AllowedHeaders": [ "Authorization" "Content-MD5" ]
No se encontraron encabezados en la respuesta de CORS
El elemento ExposeHeaders
de su configuración de CORS identifica los encabezados de respuesta que desea que sean accesibles a los scripts y las aplicaciones que se ejecutan en los navegadores en respuesta a una solicitud de CORS.
Si los objetos almacenados en el bucket de S3 tienen metadatos definidos por el usuario (por ejemplo, x-amz-meta-custom-header
) junto con los datos de respuesta, este encabezado personalizado podría contener metadatos o información adicionales a los que desee acceder desde el código JavaScript del cliente. Sin embargo, de forma predeterminada, los navegadores bloquean el acceso a los encabezados personalizados por motivos de seguridad. Para permitir que el JavaScript del cliente acceda a los encabezados personalizados, debe incluir el encabezado en la configuración de CORS.
En el siguiente ejemplo, el encabezado x-amz-meta-custom-header1
se incluye en el elemento ExposeHeaders
. x-amz-meta-custom-header2
no está incluido en el elemento ExposeHeaders
y no aparece en la configuración de CORS. En la respuesta, solo se devolverían los valores incluidos en el elemento ExposeHeaders
. Si la solicitud incluía el encabezado x-amz-meta-custom-header2
en el encabezado Access-Control-Expose-Headers
, la respuesta seguiría devolviendo un 200 OK
. Sin embargo, solo devolvería y se mostraría en la respuesta el encabezado permitido (por ejemplo, x-amz-meta-custom-header
).
"ExposeHeaders": [ "x-amz-meta-custom-header1" ]
Para garantizar que todos los encabezados aparezcan en la respuesta, agregue todos los encabezados permitidos al elemento ExposeHeaders
en su configuración de CORS, como se muestra a continuación.
"ExposeHeaders": [ "x-amz-meta-custom-header1", "x-amz-meta-custom-header2" ]
Consideraciones sobre CORS en las integraciones del proxy de S3
Si se producen errores y ya ha comprobado la configuración de CORS en el bucket de S3 y la solicitud entre orígenes se envía a proxies como AWS CloudFront, intente lo siguiente:
-
Configure los ajustes para permitir el método
OPTIONS
para las solicitudes HTTP. -
Configure el proxy para reenviar los siguientes encabezados:
Origin
,Access-Control-Request-Headers
yAccess-Control-Request-Method
.
Algunos proxies proporcionan características predefinidas para las solicitudes de CORS. Por ejemplo, en CloudFront, puede configurar una política que incluya los encabezados que permiten las solicitudes de CORS cuando el origen es un bucket de S3. Para obtener más información, consulte Control de las solicitudes de origen con una política o Uso de políticas de solicitudes de origen administradas en la Guía para desarrolladores de Amazon CloudFront.