

# Solución de problemas de CORS
<a name="cors-troubleshooting"></a>

Los siguientes temas pueden ayudarle a solucionar problemas habituales de CORS relacionados con S3.

**Topics**
+ [Error 403 Forbidden: CORS is not enabled for this bucket](#cors-not-enabled)
+ [Error 403 Forbidden - This CORS request is not allowed](#cors-not-enabled)
+ [No se encontraron encabezados en la respuesta de CORS](#Headers-not-found)
+ [Consideraciones sobre CORS en las integraciones del proxy de S3](#cors-in-proxy)

## Error 403 Forbidden: CORS is not enabled for this bucket
<a name="cors-not-enabled"></a>

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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html) 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html#cors-example-1).

## Error 403 Forbidden: This CORS request is not allowed
<a name="cors-not-enabled"></a>

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
<a name="Origin-not-allowed"></a>

 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html).

 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
<a name="Methods-not-allowed"></a>

 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html). 

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
<a name="Headers-not-allowed"></a>

 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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html). 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html). 

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
<a name="Headers-not-found"></a>

 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
<a name="cors-in-proxy"></a>

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` y `Access-Control-Request-Method`.
+ Configure los ajustes del proxy para incluir el encabezado de origen en su clave de caché. Esto es importante porque los proxies de almacenamiento en caché que no incluyen el encabezado de origen en su clave de caché pueden servir respuestas almacenadas en caché que no incluyan los encabezados CORS adecuados para diferentes orígenes.

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 habilitan las solicitudes de uso compartido de recursos de origen cruzado (CORS) cuando el origen es un bucket de Amazon S3.

 Esta política tiene las siguientes opciones: 
+ Encabezados incluidos en las solicitudes de origen:

   `Origin`

   `Access-Control-Request-Headers`

   `Access-Control-Request-Method`
+ Cookies incluidas en las solicitudes de origen: ninguna
+ Cadenas de consulta incluidas en las solicitudes de origen: ninguna

Para obtener más información, consulte [Control de las solicitudes de origen con una política](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.htm) o [Uso de políticas de solicitudes de origen administradas](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html#managed-origin-request-policy-cors-s3) en la *Guía para desarrolladores de Amazon CloudFront*. 