誰かがレスポンスヘッダにAccess-Control-Allow-Origin
を追加することに成功しましたか?私が必要としているのはこのようなものです。
<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" />
このgetリクエストはレスポンス、ヘッダ、Access-Control-Allow-Origin: *
に含まれるべきです
バケットに対する私のCORS設定は次のようになります。
<?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>
ご想像のとおり、Origin
応答ヘッダーはありません。
通常は、バケットのプロパティに「Add CORS Configuration」を追加するだけです。
<CORSConfiguration>
にはいくつかのデフォルト値があります。あなたの問題を解決するために必要なのはこれだけです。ただ「保存」をクリックして、それがうまくいったかどうか確かめるためにもう一度試みてください。もしそうでなければ、(alxrb answerからの)下記のコードを試すこともできます。これはほとんどの人にとってうまくいったようです。
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
詳細については、 バケット権限の編集 でこの記事を読むことができます。
私はバケットのプロパティで 'add CORS configuration'をクリックしたとき、私はウェブフォントのロードに関して同様の問題を抱えていました、このコードはすでにそこにありました:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
保存をクリックしただけで、問題なく機能しました。カスタムWebフォントはIE&Firefoxに読み込まれていました。私はこれについて専門家ではありません、私はちょうどこれがあなたを助けるかもしれないと思った。
@jordanstephensはコメントでこれを述べました、しかし、それはちょっと失われて、そして私にとって本当に簡単な修正でした。
私は単にHEADメソッドを追加して保存をクリックすると動作し始めました。
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod> <!-- Add this -->
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
リクエストにOrigin
ヘッダーが指定されていない場合、S3はレスポンスにCORSヘッダーを含めません。 CORSをテストするためにファイルを丸めようとし続けましたが、curlにはOrigin
が含まれていないため、これは本当に私を投げつけました。
これは古い質問ですが、それでも解決策を見つけるのは難しいです。
まず始めに、これはRails 4、Paperclip 4、CamanJS、Heroku、およびAWS S3で構築されたプロジェクトで私にとって役に立ちました。
あなたはcrossorigin: "anonymous"
パラメータを使ってあなたの画像をリクエストしなければなりません。
<img href="your-remote-image.jpg" crossorigin="anonymous">
サイトのURLをAWS S3のCORSに追加します。 ここ それについてのAmazonからの言及です。ほとんどの場合は、バケツに移動して、右側のタブから「プロパティ」を選択し、「を開きます。 )Permissionsタブをクリックし、「CORS設定の編集」をクリックします。
もともと、私は
< AllowedOrigin>
を*
に設定していました。そのアスタリスクをURLに変更するだけで、必ずhttp://
やhttps://
のようなオプションを別々の行に入れてください。私はアスタリスクが "All"を受け入れることを期待していましたが、どうやら我々はそれより具体的でなければなりません。
これは私がどのように見えるかです。
上記の回答を参照してください。 (私もクロムのバグがありました)
CHROMEのページに画像をロードして表示しないでください。 (後で新しいインスタンスを作成する予定の場合)
私の場合は、画像を読み込んでページに表示しました。それらがクリックされたとき、私はそれらの新しいインスタンスを作成しました:
// there is already an html <img /> on the page, I'm creating a new one now
img = $('<img crossorigin />')[0]
img.onload = function(){
context.drawImage(img, 0, 0)
context.getImageData(0,0,w,h)
}
img.src = 'http://s3.amazonaws.com/my/image.png'; // I added arbitrary ?crossorigin to change the URL of this to fix it
Chromeはすでに別のバージョンをキャッシュしており、表示されている画像でcrossorigin
を使用している場合でも、決してcrossorigin
バージョンを再取得しようとしませんでした。
キャンバス用にロードしたときに、画像のURLの最後に?crossorigin
を追加しました(ただし、?blah
を追加できます。キャッシュステータスを変更することは任意です)
私は問題を解決しました この回答 - 上記に追加します。
AWS/CloudFront配布ポイントをCORSオリジンヘッダーを修正するように設定するには、配布ポイントの編集インターフェイスをクリックします。
「ビヘイビア」タブに移動してビヘイビアを編集し、「選択したリクエストヘッダに基づくキャッシュ」を「なし」から「ホワイトリスト」に変更してから、「Origin
」が「ホワイトリスト」ボックスに追加されていることを確認します。詳細については、AWS Docsの CORS設定を尊重するためのCloudFrontの設定 を参照してください。
S3から3DモデルをJavascript 3Dビューア(3D HOP)にロードするときにも、同じような問題がありましたが、奇妙なことに、特定のファイルタイプ(.nxs)を使用した場合に限ります。
修正したのは、CORSの設定でAllowedHeader
をデフォルトのAuthorization
から*
に変更することでした。
<?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>
S3バケットのアクセス許可設定でCORS設定を設定します。
<?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>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
HttpリクエストにOrigin
ヘッダーがある場合にのみ、S3はCORSヘッダーを追加します。
CloudFrontはデフォルトでOrigin
ヘッダーを転送しません
CloudFrontディストリビューションの動作設定でOrigin
ヘッダーをホワイトリストに登録する必要があります。
私は上記のすべての答えを試しましたが、何もうまくいきませんでした。実際には、上の答えから3つのステップをまとめて実行する必要があります。
Flavioが示唆しているように。バケットにCORS設定を追加します。
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
画像上。 crossoriginに言及してください。
<img href="abc.jpg" crossorigin="anonymous">
CDNを使っていますか? Originサーバへの接続はすべてうまくいくがCDN経由ではうまくいかない場合。それはあなたがあなたのCDN上にCORSヘッダを受け入れるような設定が必要であることを意味します。正確な設定は、使用しているCDNによって異なります。
私はそれを次のように書いて修正しました:
<?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>
<AllowedHeader>*</AllowedHeader>
が機能し、<AllowedHeader>Authorization</AllowedHeader>
が機能しないのはなぜですか?
私はこのスレッドにたどり着きましたが、上記の解決策はどれも私のケースには当てはまりませんでした。結局、バケットのCORS設定の<AllowedOrigin>
URLから末尾のスラッシュを削除するだけでした。
失敗する
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://www.mywebsite.com/</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
勝つ:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://www.mywebsite.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
これで誰かが髪を引っ張るのを防ぐことができます。
cDNを設定するには、wuenscheの "answer"が正しいです。これをやって、私はMaxAgeSecondsを削除しました。
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
他の人が状態を持っているように、あなたはまずあなたのS3バケットにCORS設定を持つ必要があります。
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod> <!-- Add this -->
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
しかし、それをした後の私の場合、それはまだ機能していませんでした。私はChromeを使っていました(おそらく他のブラウザでも同じ問題です)。
問題は、Chromeはヘッダー付きの画像をキャッシュしていた(CORSデータを含まない)なので、AWSで何を変更しようとしても、CORSヘッダーは表示されません。
Chromeキャッシュをクリアしてページをリロードするの後、イメージのCORSヘッダーは正しくありません
最新のS3管理コンソールでは、PermissionsタブのCORS設定をクリックすると、デフォルトのサンプルCORS設定が表示されます。この設定は実際にはアクティブではありません、しかし! CORSをアクティブにするために最初に「Save」をクリックしなければなりません。
これを理解するのに私は時間がかかりすぎました、うまくいけばこれは誰かに時間を節約するでしょう。
警告-ハック。
S3Imageを使用して画像を表示し、その後フェッチで取得しようとする場合、PDFに挿入するか、他の処理を行う場合、Chromeが最初をキャッシュすることに注意してください結果は、CORSプリフライトリクエストを必要とせず、プリフェッチOPTIONSリクエストを取得せずに同じリソースを取得しようとしますが、ブラウザの制限により失敗します。
これを回避する別の方法は、S3Imageにcrossoriginが含まれることを確認することです:前述の「use-credentials」。 S3Imageを使用するファイル(S3Imageのキャッシュバージョンを作成するコンポーネントがあるので、これは私にとって最適な場所です)、S3ImageのプロトタイプimageElメソッドをオーバーライドして、この属性を強制的に含めます。
S3Image.prototype.imageEl = function (src, theme) {
if (!src) {
return null;
}
var selected = this.props.selected;
var containerStyle = { position: 'relative' };
return (React.createElement("div", { style: containerStyle, onClick: this.handleClick },
React.createElement("img", { crossOrigin: 'use-credentials', style: theme.photoImg, src: src, onLoad: this.handleOnLoad, onError: this.handleOnError}),
React.createElement("div", { style: selected ? theme.overlaySelected : theme.overlay })));
};
403問題は解決されました。なんて痛い!
この設定は私のための問題を解決しました:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>ETag</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
<AllowedOrigin>*</AllowedOrigin>
*を使用すると、バケット内のファイルへのWebサイトへのアクセスが許可されるため、お勧めできません。代わりに、バケットのリソースを使用することを正確に許可するOriginを指定する必要があります。通常、それは次のようなドメイン名です
<AllowedOrigin>https://www.example.com</AllowedOrigin>
または、可能なすべてのサブドメインを含める場合:
<AllowedOrigin>*.example.com</AllowedOrigin>
受け入れられた答えはうまくいきますが、あなたが直接リソースに行った場合、Cross-Originヘッダはありません。 cloudfrontを使用している場合は、これによってcloudfrontがヘッダーなしのバージョンをキャッシュします。このリソースをロードする別のURLに移動すると、このOrigin間の問題が発生します。
以下は設定であり、私のために働くことは問題ありません。 AWS S3での問題の解決に役立つことを願っています。
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<ExposeHeader>ETag</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>