Quelqu'un a-t-il réussi à ajouter Access-Control-Allow-Origin
aux en-têtes de réponse? Ce dont j'ai besoin est quelque chose comme ça:
<img src="http://360assets.s3.amazonaws.com/tours/8b16734d-336c-48c7-95c4-3a93fa023a57/1_AU_COM_180212_Areitbahn_Hahnkoplift_Bergstation.tiles/l2_f_0101.jpg" />
Cette demande d'obtention doit contenir dans la réponse, l'en-tête, Access-Control-Allow-Origin: *
Mes paramètres CORS pour le seau ressemblent à ceci:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Comme vous vous en doutez, il n'y a pas d'en- Origin
tête de réponse.
Réponses:
Habituellement, tout ce que vous avez à faire est "Ajouter une configuration CORS" dans les propriétés de votre compartiment.
Le
<CORSConfiguration>
est livré avec des valeurs par défaut. C'est tout ce dont j'avais besoin pour résoudre votre problème. Cliquez simplement sur "Enregistrer" et réessayez pour voir si cela a fonctionné. Si ce n'est pas le cas, vous pouvez également essayer le code ci-dessous (de la réponse d'alxrb) qui semble avoir fonctionné pour la plupart des gens.Pour plus d'informations, vous pouvez lire cet article sur la modification des autorisations de compartiment .
la source
HEAD
à laAllowedMethod
sJ'avais un problème similaire avec le chargement des polices Web, lorsque j'ai cliqué sur `` ajouter la configuration CORS '', dans les propriétés du seau, ce code était déjà là:
Je viens de cliquer sur Enregistrer et cela a fonctionné un régal, mes polices Web personnalisées se chargeaient dans IE et Firefox. Je ne suis pas un expert en la matière, j'ai juste pensé que cela pourrait vous aider.
la source
<AllowedHeader>*</AllowedHeader>
pour que cela fonctionne (mieux vaut créer une nouvelle règle pour votre site uniquement en faisant cela)Si votre demande ne spécifie pas d'en-
Origin
tête, S3 n'inclura pas les en-têtes CORS dans la réponse. Cela m'a vraiment dérangé parce que j'ai continué à essayer de curl les fichiers pour tester le CORS mais curl ne comprend pasOrigin
.la source
img
balise? Je ne peux pas envoyer différents en-têtes, le navigateur envoie la demande@jordanstephens a dit cela dans un commentaire, mais cela se perd en quelque sorte et était une solution très facile pour moi.
J'ai simplement ajouté la méthode HEAD et cliqué sur enregistré et cela a commencé à fonctionner.
la source
HEAD
méthode a fait l'affaire.C'est une manière simple de faire fonctionner cela.
Je sais que c'est une vieille question, mais il est encore difficile de trouver une solution.
Pour commencer, cela a fonctionné pour moi sur un projet construit avec Rails 4, Paperclip 4, CamanJS, Heroku et AWS S3.
Vous devez demander votre image en utilisant le
crossorigin: "anonymous"
paramètre.Voilà comment ça me regarde.
la source
<img>
, mais je n'ai mis quecrossOrigin="true"
par erreur. MERCI!Voir les réponses ci-dessus. (mais j'ai aussi eu un bug de chrome)
Ne chargez pas et n'affichez pas l'image sur la page dans CHROME. (si vous comptez créer plus tard une nouvelle instance)
Dans mon cas, j'ai chargé des images et les ai affichées sur la page. Lorsqu'ils ont été cliqués, j'ai créé une nouvelle instance d'eux:
Chrome avait déjà mis en cache une autre version et n'a JAMAIS essayé de récupérer la
crossorigin
version (même si j'utilisaiscrossorigin
sur les images affichées.Pour corriger, j'ai ajouté
?crossorigin
à la fin de l'url de l'image (mais vous pouvez ajouter?blah
, c'est juste arbitraire de changer l'état du cache) lorsque je l'ai chargé pour le canevas .. Faites-moi savoir si vous trouvez un meilleur correctif pour CHROMEla source
Je vais juste ajouter à cette réponse - ci-dessus - qui a résolu mon problème.
Pour configurer AWS / CloudFront Distribution Point pour qu'il redirige l'en-tête CORS Origin, cliquez dans l'interface d'édition du point de distribution:
Accédez à l'onglet des comportements et modifiez le comportement, en changeant "Cache basé sur les en-têtes de demande sélectionnés" de Aucun à Liste blanche, puis assurez-vous qu'il
Origin
est ajouté à la liste blanche. Consultez Configuration de CloudFront pour respecter les paramètres CORS dans la documentation AWS pour en savoir plus.la source
HTTP Request Methods
doit être défini dans AWS. Et à cette question, je ne vois pas que l'on doive être placé nulle part. Si vous parlez au sein de l'application demandant la ressource, je crois que vous demanderiez simplement le fichier par sonurl string
: c'est-à-dire une image, une vidéo, un fichier audio.J'avais des problèmes similaires lors du chargement de modèles 3D de S3 dans une visionneuse 3D javascript (3D HOP), mais assez étrangement uniquement avec certains types de fichiers (.nxs).
Ce qui a résolu le problème pour moi était de passer
AllowedHeader
de la valeur par défautAuthorization
à*
la configuration CORS:la source
<AllowedHeader>*</AllowedHeader>
comme ça avec un astérisque pour Chrome en octobre 2017. Merci beaucoup! (N'oubliez pas non plus de vider le cache du navigateur après le réglage).AllowedHeader
. J'avais également le même problème ici, mais il s'avère que c'était le navigateur qui mettait en cache la réponse précédente (MaxAgeSeconds
). Dans les paramètres DevTools, vous pouvez ignorer le cache lorsque la console est ouverte. Une fois que cela a été fait, cela a commencé à fonctionner pour moiComme d'autres ont des états, vous devez d'abord avoir la configuration CORS dans votre compartiment S3:
Mais dans mon cas, après avoir fait cela, cela ne fonctionnait toujours pas. J'utilisais Chrome (probablement le même problème avec d'autres navigateurs).
Le problème était que Chrome mettait en cache l'image avec les en-têtes (ne contenant pas les données CORS) , donc peu importe ce que j'essayais de changer dans AWS, je ne verrais pas mes en-têtes CORS.
Après avoir effacé le cache Chrome et rechargé la page , l'image avait les en-têtes CORS attendus
la source
J'ai essayé toutes les réponses ci-dessus et rien n'a fonctionné. En fait, nous avons besoin de 3 étapes parmi les réponses ci-dessus pour que cela fonctionne:
Comme suggéré par Flavio; ajoutez la configuration CORS sur votre bucket:
Sur l'image; mentionner crossorigin:
Utilisez-vous un CDN? Si tout fonctionne bien, connectez-vous au serveur d'origine mais PAS via CDN; cela signifie que vous avez besoin de certains paramètres sur votre CDN, comme accepter les en-têtes CORS. Le réglage exact dépend du CDN que vous utilisez.
la source
Je suis arrivé à ce fil, et aucune des solutions ci-dessus ne s'est avérée s'appliquer à mon cas. Il s'avère que j'ai simplement dû supprimer une barre oblique de fin de l'
<AllowedOrigin>
URL dans la configuration CORS de mon compartiment.Échoue:
Victoires:
J'espère que cela évitera à quelqu'un de se tirer les cheveux.
la source
Définissez la configuration CORS dans les paramètres d'autorisations pour votre compartiment S3
S3 ajoute des en-têtes CORS uniquement lorsque la requête http a l'en-
Origin
tête.CloudFront ne transfère pas l' en-
Origin
tête par défautVous devez ajouter l'en-
Origin
tête à la liste blanche dans les paramètres de comportement de votre distribution CloudFront.la source
Je l'ai corrigé en écrivant ce qui suit:
Pourquoi ça
<AllowedHeader>*</AllowedHeader>
marche et<AllowedHeader>Authorization</AllowedHeader>
non?la source
fwuensche "réponse" est correct pour mettre en place un CDN; ce faisant, j'ai supprimé MaxAgeSeconds.
la source
Dans la dernière console de gestion S3, lorsque vous cliquez sur la configuration CORS dans l'onglet Permissions, il affichera un exemple de configuration CORS par défaut. Cette configuration n'est cependant pas réellement active! Vous devez d'abord cliquer sur Enregistrer pour activer CORS.
Il m'a fallu beaucoup trop de temps pour comprendre cela, j'espère que cela permettra à quelqu'un de gagner du temps.
la source
Cette configuration a résolu le problème pour moi:
la source
Avertissement - Hack.
Si vous utilisez S3Image pour afficher une image et que vous essayez ensuite de l'obtenir via fetch, peut-être pour l'insérer dans un PDF ou pour effectuer un autre traitement, sachez que Chrome mettra en cache le premier résultat qui ne nécessite pas de demande de contrôle en amont CORS, et essayez ensuite d'obtenir la même ressource sans la demande OPTIONS de contrôle en amont pour la récupération et échouera en raison des restrictions du navigateur.
Une autre façon de contourner ce problème est de s'assurer que la S3Image inclut crossorigin: 'use-credentials' comme mentionné ci-dessus. Dans le fichier que vous utilisez S3Image, (j'ai un composant qui crée une version mise en cache de S3Image, donc c'est l'endroit idéal pour moi), remplacez la méthode prototype imageEl de S3Image pour la forcer à inclure cet attribut.
Le problème 403 est maintenant résolu. Quelle douleur aggrr!
la source
n'est pas une bonne idée car avec * vous accordez à n'importe quel site Web l'accès aux fichiers de votre bucket. Au lieu de cela, vous devez spécifier quelle origine est exactement autorisée à utiliser les ressources de votre compartiment. Habituellement, c'est votre nom de domaine comme
ou si vous souhaitez inclure tous les sous-domaines possibles:
la source
Vous trouverez ci-dessous la configuration et c'est bien de travailler pour moi. J'espère que cela aidera à résoudre votre problème sur AWS S3.
la source
Tout d'abord, activez CORS dans votre compartiment S3. Utilisez ce code comme guide:
2) Si cela ne fonctionne toujours pas, assurez-vous d'ajouter également un "crossorigin" avec une valeur "*" à vos balises img. Mettez ceci dans votre fichier html:
la source
La réponse acceptée fonctionne, mais il semble que si vous accédez directement à la ressource, il n'y a pas d'en-têtes d'origine croisée. Si vous utilisez cloudfront, cloudfront mettra en cache la version sans en-têtes.Lorsque vous accédez à une URL différente qui charge cette ressource, vous rencontrez ce problème d'origine croisée.
la source
Si vos paramètres CORS ne vous aident pas.
Vérifiez que la configuration S3 est correcte. J'avais un nom de compartiment incorrect dans
Storage.configure
. J'ai utilisé un nom court de bucket et cela a provoqué une erreur:la source
Pour ce que ça vaut, j'ai eu un problème similaire - en essayant d'ajouter une origine autorisée spécifique (non
*
).Il s'avère que j'ai dû corriger
à
(notez le dernier slah dans l'URL)
J'espère que cela aide quelqu'un
la source