7

Kürzlich habe ich aktiviert, dass Amazon S3 + CloudFront als CDN für meine Rails-Anwendung dient. Um Font-Assets zu verwenden und sie in Firefox oder IE anzuzeigen, muss ich CORS in meinem S3-Bucket aktivieren.Benötigt Amazon S3 Zeit, um die CORS-Einstellungen zu aktualisieren? Wie lang?

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>*</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

Dann habe ich curl -I https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz, ich habe:

HTTP/1.1 200 OK 
x-amz-id-2: Ovs0D578kzW1J72ej0duCi17lnw+wZryGeTw722V2XOteXOC4RoThU8t+NcXksCb 
x-amz-request-id: 52E934392E32679A 
Date: Tue, 04 Jun 2013 02:34:50 GMT 
Cache-Control: public, max-age=31557600 
Content-Encoding: gzip 
Expires: Wed, 04 Jun 2014 08:16:26 GMT 
Last-Modified: Tue, 04 Jun 2013 02:16:26 GMT 
ETag: "723791e0c993b691c442970e9718d001" 
Accept-Ranges: bytes 
Content-Type: text/javascript 
Content-Length: 39140 
Server: AmazonS3 

Sollte ich sehen 'Access-Control-Allow-Origin' einige, wo? Benötigt S3 Zeit, um die CORS-Einstellungen zu aktualisieren? Kann ich das Auslaufen von Kopfzeilen erzwingen, wenn diese zwischengespeichert werden?

+0

Vergewissern Sie sich, diese Probleme behoben worden, wenn Sie CORS wirksam nicht sehen. http://docs.aws.amazon.com/AmazonS3/latest/dev/cors-troubleshooting.html Idealerweise sollte es nicht zu lange dauern. Ich habe es ungefähr ein paar Minuten vorher gesehen. – Keshi

Antwort

4

Versuchen Sie, den Origin-Header zu senden:

$ curl -v -H "Origin: http://example.com" -X GET https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz > /dev/null 

Die Ausgabe sollte die CORS-Response-Header dann zeigen Sie suchen:

< Access-Control-Allow-Origin: http://example.com 
< Access-Control-Allow-Methods: GET 
< Access-Control-Allow-Credentials: true 
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method 

Weitere Informationen darüber, wie CORS-Anfragen zu debuggen mit cURL sein kann hier gefunden: How can you debug a CORS request with cURL?

Beachten Sie, dass es verschiedene Arten von CORS-Anfragen (einfache und Preflight) gibt , ein nettes Tutorial über die Unterschiede finden Sie hier: http://www.html5rocks.com/en/tutorials/cors/

Hoffe, das hilft!

1

Versuchen Sie diese:

  1. zum Umfang nach unten Versuchen Sie, die Domain-Namen, die Sie Zugriff auf zulassen möchten. S3 mag nicht *.
  2. CloudFront + S3 doesn't handle the CORS configuration correctly out of the box. Ein Kludat besteht darin, eine Abfragezeichenfolge mit dem Namen der verweisenden Domäne anzuhängen und die Unterstützung für Abfragezeichenfolgen in Ihren CloudFront-Verteilungseinstellungen explizit zu aktivieren.
0

Sie haben ein paar Probleme mit der Art, wie Sie CORS testen. 1. Ihre CORS-Konfiguration hat keine HEAD-Methode. 2. Ihr Curl-Befehl hat keinen -H-Header.

Ich bin in der Lage, Ihre Daten mit Hilfe von Curl wie folgt zu erhalten. Sie haben Müll auf meinem Bildschirm ausgegeben, weil Ihre Daten binär komprimiert sind.

curl --request GET https://small-read-staging-assets.s3.amazonaws.com/staging/assets/settings_settings-312b7230872a71a534812e770ec299bb.js.gz -H "http://google.com"