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.
Les rubriques suivantes peuvent vous aider à résoudre certains problèmes CORS courants liés à S3.
Rubriques
Erreur 403 Forbidden : CORS n’est pas activé pour ce compartiment
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 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.
Erreur 403 Forbidden : cette demande CORS n’est pas autorisée
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
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).
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
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).
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
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. 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).
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
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
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
etAccess-Control-Request-Method
.
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 et Utiliser des politiques de demande d'origine gérées dans le Guide du CloudFront développeur.