

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Dépannage du CORS
<a name="cors-troubleshooting"></a>

Les rubriques suivantes peuvent vous aider à résoudre certains problèmes CORS courants liés à S3.

**Topics**
+ [Erreur 403 Forbidden : CORS n’est pas activé pour ce compartiment](#cors-not-enabled)
+ [Erreur 403 Forbidden : cette demande CORS n’est pas autorisée](#cors-not-enabled)
+ [En-têtes introuvables dans la réponse CORS](#Headers-not-found)
+ [Considérations relatives à CORS sur les intégrations de proxy S3](#cors-in-proxy)

## Erreur 403 Forbidden : CORS n’est pas activé pour ce compartiment
<a name="cors-not-enabled"></a>

L’erreur `403 Forbidden` suivante se produit lorsqu’une demande entre origines multiples est envoyée à Amazon S3 mais que CORS n’est pas configuré sur votre compartiment S3. 

 Erreur : HTTP/1.1 403 Forbidden CORS Response: CORS is not enabled for this bucket.

La configuration CORS est un document ou une politique contenant des règles qui identifient les origines auxquelles vous autorisez l’accès à votre compartiment, les opérations (méthodes HTTP) prises en charge pour chaque origine, et d’autres informations propres aux opérations. Découvrez comment [configurer CORS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html) sur S3 à l'aide de la console Amazon S3 et de l'API REST. AWS SDKs Pour plus d’informations sur CORS et des exemples de configuration CORS, consultez [Éléments de CORS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html#cors-example-1).

## Erreur 403 Forbidden : cette demande CORS n’est pas autorisée
<a name="cors-not-enabled"></a>

L’erreur `403 Forbidden` suivante est reçue lorsqu’une règle CORS de votre configuration CORS ne correspond pas aux données de votre demande.

Erreur :  HTTP/1.1 403 Forbidden CORS Response: This CORS request is not allowed.

Par conséquent, cette erreur `403 Forbidden` peut se produire pour plusieurs raisons :
+ L’origine n’est pas autorisée.
+ Les méthodes ne sont pas autorisées.
+ Les en-têtes demandés ne sont pas autorisés.

Pour chaque demande reçue par Amazon S3, vous devez disposer dans votre configuration CORS d’une règle CORS correspondant aux données de votre demande. 

### L’origine n’est pas autorisée
<a name="Origin-not-allowed"></a>

 L’en-tête `Origin` d’une demande CORS adressée à votre compartiment doit correspondre aux origines de l’élément `AllowedOrigins` de votre configuration CORS. Un caractère générique (`"*"`) dans l’élément `AllowedOrigins` correspondrait à toutes les méthodes HTTP. Pour plus d’informations sur la façon de mettre à jour l’élément `AllowedOrigins`, consultez [Configuration du partage des ressources entre origines multiples (CORS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html).

 Par exemple, si seul le domaine `http://www.example1.com` est inclus dans l’élément `AllowedOrigins`, une demande CORS envoyée depuis le domaine `http://www.example2.com` recevra l’erreur `403 Forbidden`. 

L’exemple suivant montre une partie d’une configuration CORS qui inclut le domaine `http://www.example1.com` dans l’élément `AllowedOrigins`. 

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

Pour qu’une demande CORS envoyée depuis le domaine `http://www.example2.com` aboutisse, le domaine `http://www.example2.com` doit être inclus dans l’élément `AllowedOrigins` de la configuration CORS. 

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

### Les méthodes ne sont pas autorisées
<a name="Methods-not-allowed"></a>

 Les méthodes HTTP spécifiées dans `Access-Control-Request-Method`, dans une demande CORS adressée à votre compartiment, doivent correspondre à la ou aux méthodes répertoriées dans l’élément `AllowedMethods` de votre configuration CORS. Un caractère générique (`"*"`) dans `AllowedMethods` correspondrait à toutes les méthodes HTTP. Pour plus d’informations sur la façon de mettre à jour l’élément `AllowedOrigins`, consultez [Configuration du partage des ressources entre origines multiples (CORS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html). 

Dans une configuration CORS, vous pouvez spécifier les méthodes suivantes dans l’élément `AllowedMethods` :
+ `GET`
+ `PUT`
+ `POST`
+ `DELETE`
+ `HEAD`

L’exemple suivant montre une partie d’une configuration CORS qui inclut la méthode `GET` dans l’élément `AllowedMethods`. Seules les demandes incluant la méthode `GET` aboutiront. 

```
"AllowedMethods":[
   "GET"
]
```

 Si une méthode HTTP (par exemple, `PUT`) était utilisée dans une demande CORS ou incluse dans une demande CORS de contrôle en amont adressée à votre compartiment mais que la méthode n’était pas présente dans votre configuration CORS, la demande entraînerait une erreur `403 Forbidden`. Pour autoriser cette demande CORS ou cette demande CORS de contrôle en amont, vous devez ajouter la méthode `PUT` à votre configuration CORS. 

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

### Les en-têtes demandés ne sont pas autorisés
<a name="Headers-not-allowed"></a>

 Les en-têtes répertoriés dans l’en-tête `Access-Control-Request-Headers` d’une demande de contrôle en amont doivent correspondre aux en-têtes de l’élément `AllowedHeaders` de votre configuration CORS. Pour obtenir la liste des en-têtes courants qui peuvent être utilisés dans les demandes adressées à Amazon S3, consultez [En-têtes de demandes courants](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html). Pour plus d’informations sur la façon de mettre à jour l’élément `AllowedHeaders`, consultez [Configuration du partage des ressources entre origines multiples (CORS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html). 

L’exemple suivant montre une partie d’une configuration CORS qui inclut l’en-tête `Authorization` dans l’élément `AllowedHeaders`. Seules les demandes relatives à l’en-tête `Authorization` aboutiront. 

```
"AllowedHeaders":  [
    "Authorization"
]
```

 Si un en-tête (par exemple, `Content-MD5`) était inclus dans une demande CORS mais qu’il n’était pas présent dans votre configuration CORS, la demande entraînerait une erreur `403 Forbidden`. Pour autoriser cette demande CORS, vous devez ajouter l’en-tête `Content-MD5` à votre configuration CORS. Si vous souhaitez transmettre à la fois les en-têtes `Authorization` et `Content-MD5` dans une demande CORS à votre compartiment, vérifiez que les deux en-têtes sont inclus dans l’élément `AllowedHeaders` de votre configuration CORS. 

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

## En-têtes introuvables dans la réponse CORS
<a name="Headers-not-found"></a>

 L’élément `ExposeHeaders` de votre configuration CORS identifie les en-têtes de réponse que vous souhaiteriez rendre accessibles aux scripts et aux applications exécutés dans les navigateurs, en réponse à une demande CORS.

Si vos objets stockés dans votre compartiment S3 comportent des métadonnées définies par l'utilisateur (par exemple,`x-amz-meta-custom-header`) en plus des données de réponse, cet en-tête personnalisé peut contenir des métadonnées ou des informations supplémentaires auxquelles vous souhaitez accéder à partir de votre code côté client JavaScript . Toutefois, par défaut, les navigateurs bloquent l’accès aux en-têtes personnalisés pour des raisons de sécurité. Pour permettre à votre client JavaScript d'accéder aux en-têtes personnalisés, vous devez inclure l'en-tête dans votre configuration CORS.

 Dans l’exemple ci-dessous, l’en-tête `x-amz-meta-custom-header1` est inclus dans l’élément `ExposeHeaders`. L’élément `x-amz-meta-custom-header2` n’est pas inclus dans l’élément `ExposeHeaders` et est absent de la configuration CORS. Dans la réponse, seules les valeurs incluses dans l’élément `ExposeHeaders` seraient renvoyées. Si la demande incluait l’en-tête `x-amz-meta-custom-header2` dans l’en-tête `Access-Control-Expose-Headers`, la réponse renverrait toujours un `200 OK`. Toutefois, seul l’en-tête autorisé (par exemple, `x-amz-meta-custom-header`) serait renvoyé et affiché dans la réponse. 

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

 Pour vous assurer que tous les en-têtes apparaîtront dans la réponse, ajoutez tous les en-têtes autorisés à l’élément `ExposeHeaders` dans votre configuration CORS, comme indiqué ci-dessous. 

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

## Considérations relatives à CORS sur les intégrations de proxy S3
<a name="cors-in-proxy"></a>

Si vous rencontrez des erreurs et que vous avez déjà vérifié la configuration CORS sur votre compartiment S3 et que la demande cross-origin est envoyée à des proxys tels que AWS CloudFront, essayez ce qui suit :
+ Configurez les paramètres pour autoriser la méthode `OPTIONS` pour les requêtes HTTP.
+ Configurez le proxy pour transférer les en-têtes suivants : `Origin`, `Access-Control-Request-Headers` et `Access-Control-Request-Method`.
+ Configurez les paramètres du proxy pour inclure l’en-tête d’origine dans sa clé de cache. Ceci est important, car les proxys de mise en cache qui n’incluent pas l’en-tête d’origine dans leur clé de cache peuvent fournir des réponses mises en cache qui n’incluent pas les en-têtes CORS appropriés pour différentes origines.

Certains proxys fournissent des fonctionnalités prédéfinies pour les demandes CORS. Par exemple, dans CloudFront, vous pouvez configurer une politique qui inclut les en-têtes 

 qui activent les demandes de partage de ressources entre origines multiples (CORS) lorsque l’origine est un compartiment Amazon S3.

 Cette stratégie possède les paramètres suivants : 
+ En-têtes inclus dans les demandes d’origine :

   `Origin`

   `Access-Control-Request-Headers`

   `Access-Control-Request-Method`
+ **Cookies inclus dans les demandes d’origine :** Aucun
+ Chaînes de requête incluses dans les demandes d’origine : Aucune

Pour plus d'informations, consultez les sections [Contrôler les demandes d'origine à l'aide d'une politique](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.htm) et [Utiliser des politiques de demande d'origine gérées](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html#managed-origin-request-policy-cors-s3) dans le *Guide du CloudFront développeur*. 